Php 如何使用带有CONVERT_TZ()的MySQL获取每天的最后一个条目

Php 如何使用带有CONVERT_TZ()的MySQL获取每天的最后一个条目,php,mysql,timezone,convert-tz,Php,Mysql,Timezone,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 --useri

所以我用这段代码从数据库中获取每天的最后一个条目

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')
以获取不同时区每天的最后一个条目。到目前为止,我已经设法使用
converttz
来简单地显示转换后的日期。但是,您可以同时使用
MAX()
converttz()
吗?

如果您想在极端情况下选择一行,可以通过按所需条件对结果集排序并将输出限制为一行来尝试。也许是这样的

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()
(您正在搜索的日期)以满足您的需要。

你好,Nalthariel,谢谢。我会再多解释一点。目前,所有日期均以UTC为单位。我正在构建的应用程序每天存储多个数据条目。我想查看并获取每一天的最后一个条目,然后从中输出信息。如果我们假设我所说的是UTC中的最后一个条目,那么上述方法很有效。但是,当然,如果我在新加坡的话,最后一个条目会有所不同。所以,使用相同的数据集,我需要从不同的时区获取每天的最后一个条目……举个例子。我有一个条目说我在UTC 7月17日晚上11:58在英国(暂时忽略夏令时)。在新加坡,同样的条目显示我在7月18日上午7:58在英国。因此,在新加坡的时区中,这不是一天的最后一个条目,因为7月18日下午3:58(UTC)可能会有另一个条目,即7月18日下午11:58(新加坡)。我理解这有点疯狂,但我认为,如果我能做到这一点,这是实现我正在尝试的目标的最佳方式。在这种情况下,如果你在结果集上添加条件约束,定义你试图限制的日期,如上所述应该有效,正如我在答案中添加的那样。谢谢Naltharial。这太棒了。结合在所示链接中看到的内容,我可以以一种更高效、更少占用数据库的方式完成此任务: