我是 mySQL 开发新手,我正在尝试解决一些棘手的问题。我有一张表,里面全是按“创建”时间戳记的每小时记录。
我需要编写一个查询,从表中提取 30 条记录,其中每条记录都是从 NOW() 开始的 30 天内当天的最后一条记录。
我随后需要在 24 周和 12 个月内做同样的事情,但我假设一旦我在几天内解决了 1 个查询,我就可以解决剩下的问题。
提前致谢
最佳答案
如果您使用适当的聚合查询,这并不难。
假设您的表是 records
并且您的 DATETIME
或 TIMESTAMP
列称为 time_stamp
。
试试这个:
SELECT DATE(time_stamp) AS the_day,
MAX(time_stamp) AS eod_timestamp
FROM records
WHERE time_stamp >= CURDATE() - INTERVAL 30 DAY
GROUP BY DATE(time_stamp)
这会获取过去 30 天表中每一天的最新 (MAX) time_stamp。
如果您想在 records
中找到具有这些日结束时间戳的确切行,您可以像这样将此聚合查询连接到 records
表。
SELECT eod.the_day, r.whatever, r.whatever, r.whatever
FROM records AS r
JOIN (
SELECT DATE(time_stamp) AS the_day,
MAX(time_stamp) AS eod_timestamp
FROM records
WHERE time_stamp >= CURDATE() - INTERVAL 30 DAY
GROUP BY DATE(time_stamp)
) AS eod ON r.time_stamp = eod.eod_timestamp
请注意,查询中的 ON
子句从 records
中提取具有日终时间戳的行。如果不止一条记录具有相同的日终时间戳,此查询将获取所有记录。
关于mysql - 从 MySQL 中的每小时集中选择 30 个 EOD 记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24479735/