2011-07-18 1 views
1

Donc j'utilise ce code pour obtenir la dernière entrée pour chaque jour d'une base de données.Comment obtenir la dernière entrée pour chaque jour en utilisant MySQL avec CONVERT_TZ()

SELECT a.id, a.userid, a.jurisdiction, a.country, a.date 
FROM dk_location_records AS a, 
     (SELECT userid, DATE(date) AS just_date, MAX(date) AS date 
      FROM dk_location_records 
      GROUP BY 1, 2 --userid, DATE(date) 
     ) AS b 
WHERE a.userid = b.userid 
AND a.date = b.date; 

Ma question est, comment puis-je intégrer quelque chose comme: CONVERT_TZ(date, '+00:00', '+01:00') pour obtenir la dernière entrée par jour pour un fuseau horaire différent. J'ai jusqu'ici réussi à utiliser le CONVERT_TZ pour afficher simplement les dates converties. Cependant, pouvez-vous utiliser MAX() et CONVERT_TZ() ensemble?

Répondre

0

Si vous souhaitez sélectionner une seule ligne à l'extrême, vous pouvez l'essayer en classant le résultat selon les critères souhaités et en limitant la sortie à une seule ligne. Quelque chose, peut-être, comme

SELECT a.id, a.userid, a.jurisdiction, a.country, a.date 
ORDER BY CONVERT_TZ(date, '+00:00', '+01:00') DESC 
LIMIT 1 

Il devrait être assez rapide que de faire un balayage de table de sous-requête. Bien que je puisse mal comprendre ce que vous essayez de faire ici. La conversion du fuseau horaire ne changera pas l'ordre des dates. Si vous souhaitez rechercher des entrées dans un jour dans un autre fuseau horaire, il est possible d'essayer

SELECT a.id, a.userid, a.jurisdiction, a.country, a.date 
WHERE CAST(CONVERT_TZ(a.date, '+00:00', '+01:00') AS DATE) = CURDATE() 
ORDER BY a.date DESC 
LIMIT 1 

Bien sûr, modifier '+01:00' (fuseau horaire de destination) et CURDATE() (date que vous recherchez) pour répondre à vos besoins .

+0

Salut Nalthariel, merci pour cela. Je vais essayer de l'expliquer un peu plus. Pour le moment, toutes les dates sont en UTC. L'application que je construis stocke plusieurs entrées de données pour chaque jour. Je veux passer à travers et obtenir la dernière entrée de chaque jour et juste sortir les informations de celui-ci. Ce qui précède fonctionne bien si nous supposons que je parle de la dernière entrée en UTC. Mais, bien sûr, la dernière entrée si j'étais à Singapour serait différente. Donc, en utilisant le même ensemble de données, j'ai besoin d'obtenir la dernière entrée de chaque jour à partir de différents fuseaux horaires ... –

+0

... Donc, un exemple. J'ai une entrée qui dit que je suis au Royaume-Uni à 23h58 le 17 juillet à l'UTC (en ignorant l'heure d'été pour l'instant). A Singapour, cette même entrée me montrerait comme étant au Royaume-Uni à 07h58 le 18 juillet. Par conséquent, dans le fuseau horaire de Singapour, ce n'est pas la dernière entrée de la journée car il pourrait y avoir une autre entrée à 15h58, 18 juillet (UTC), qui serait 23h58, 18 juillet (Singapour). J'apprécie que ce soit un peu fou mais je pense, si je peux le faire, c'est la meilleure façon de réaliser ce que j'essaie de faire. –

+0

Dans ce cas, ce qui précède devrait fonctionner si vous ajoutez une contrainte conditionnelle sur le jeu de résultats, en définissant le jour auquel vous essayez de vous limiter, comme je l'ai ajouté à la réponse. – Naltharial

Questions connexes