Как получить последнюю запись за каждый день, используя MySQL с CONVERT_TZ () - PullRequest
1 голос
/ 18 июля 2011

Поэтому я использую этот код для получения последней записи за каждый день из базы данных.

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;

Мой вопрос: как я могу добавить что-то вроде: CONVERT_TZ( date, '+00:00', '+01:00' ), чтобы получить последнюю запись в день для другого часового пояса. Мне до сих пор удавалось использовать CONVERT_TZ, чтобы просто отобразить конвертированные даты. Тем не менее, вы можете использовать MAX() и CONVERT_TZ() вместе?

1 Ответ

0 голосов
/ 18 июля 2011

Если вы хотите выбрать одну строку в крайнем случае, вы можете попробовать ее, упорядочив набор результатов по требуемым критериям и ограничив вывод одной строкой.Может быть, что-то вроде

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

Это должно быть намного быстрее, чем сканирование таблицы подзапроса.

Хотя, возможно, я неправильно понимаю, что вы пытаетесь сделать здесь.Преобразование часового пояса не изменит порядок дат.Если вы хотите искать записи в течение дня в другом часовом поясе, можно попробовать

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

Конечно, измените '+01:00' (часовой пояс места назначения) и CURDATE() (дата, которую вы ищетедля), чтобы соответствовать вашим потребностям.

...