在MySQL中从每小时设置中选择30条EOD记录
我是mySQL开发的新手,正在尝试解决一些棘手的问题。我有一张满是小时记录的表格,时间戳是“created” 我需要编写一个查询,从表中提取30条记录,其中每条记录都是从现在开始的30天内的最后一条记录() 我随后需要在24周和12个月内做同样的事情,但我假设,一旦我在这几天内完成了一个查询,我就可以解决其余的问题在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,
提前感谢如果使用适当的聚合查询,这并不难 假设您的表是
记录
,并且您的日期时间
或时间戳
列被称为时间戳
试试这个:
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中没有做过很多与度量相关的事情,但我已经厌倦了使用脚本来完成繁重的工作。