Как получить последнюю запись за каждый день, используя MySQL с 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;

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

1 ответ

Решение

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

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() (дата, которую вы ищете), чтобы соответствовать вашим потребностям.

Другие вопросы по тегам