mysql - 从 MySQL 中的每小时集中选择 30 个 EOD 记录

标签 mysql sql datetime time-series aggregate-functions

我是 mySQL 开发新手,我正在尝试解决一些棘手的问题。我有一张表,里面全是按“创建”时间戳记的每小时记录。

我需要编写一个查询,从表中提取 30 条记录,其中每条记录都是从 NOW() 开始的 30 天内当天的最后一条记录。

我随后需要在 24 周和 12 个月内做同样的事情,但我假设一旦我在几天内解决了 1 个查询,我就可以解决剩下的问题。

提前致谢

最佳答案

如果您使用适当的聚合查询,这并不难。

假设您的表是 records 并且您的 DATETIMETIMESTAMP 列称为 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/

相关文章:

mysql - 在数据库级别处理并发问题

mysql - 如何使用 phpmyadmin 检查电子邮件是否存在于两个表中

sql - ORA-01843 : not a valid month error when using to_date function

java - 不同用户使用不同的值同时更新数据库记录

php - 获得插入数据库的正确结果 - Laravel

php - 尝试使用一个表中的 id 值将两个表连接在一起

mysql - 如何对 SQL-Laravel 的所有聚合值求和?

datetime - 为什么输出中出现负号?

c# - 如何根据同月的日期查找一个月中特定日期的第 5 天或结束日期

mysql - 无法添加外键 SQL fiddle