在MySQL中从每小时设置中选择30条EOD记录

在MySQL中从每小时设置中选择30条EOD记录,mysql,sql,datetime,time-series,aggregate-functions,Mysql,Sql,Datetime,Time Series,Aggregate Functions,我是mySQL开发的新手,正在尝试解决一些棘手的问题。我有一张满是小时记录的表格,时间戳是“created” 我需要编写一个查询,从表中提取30条记录,其中每条记录都是从现在开始的30天内的最后一条记录() 我随后需要在24周和12个月内做同样的事情,但我假设,一旦我在这几天内完成了一个查询,我就可以解决其余的问题 提前感谢如果使用适当的聚合查询,这并不难 假设您的表是记录,并且您的日期时间或时间戳列被称为时间戳 试试这个: SELECT DATE(time_stamp) AS the_day,

我是mySQL开发的新手,正在尝试解决一些棘手的问题。我有一张满是小时记录的表格,时间戳是“created”

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

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


提前感谢

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

假设您的表是
记录
,并且您的
日期时间
时间戳
列被称为
时间戳

试试这个:

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天内每天的最新(最大)时间戳

如果您想在
记录
中找到具有这些日终时间戳的确切行,可以像这样将此聚合查询连接到
记录

 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
子句从
记录中提取具有一天结束时间戳的行。如果有多条记录具有相同的日终时间戳,则此查询将获取所有记录。

能否显示您迄今为止尝试的内容,以及结果如何不符合您的要求?谢谢Ollie!工作得很有魅力。我能够很容易地适应我正在尝试做的事情以及其他一些事情。整个子查询联接对我来说有点陌生。子查询(或虚拟表)相互联接是结构化查询语言的核心。我想我应该重新表述一下,子查询利用时间戳。。多年来,我对大部分页面数据进行了内部/外部连接。在SQL中没有做过很多与度量相关的事情,但我已经厌倦了使用脚本来完成繁重的工作。