Mysql SQL日期不是相对的
我有一个表,其中每15分钟存储一次cron作业的结果,它只不过是一个时间戳、一个总体编号和一个id 我试着如下查询它Mysql SQL日期不是相对的,mysql,Mysql,我有一个表,其中每15分钟存储一次cron作业的结果,它只不过是一个时间戳、一个总体编号和一个id 我试着如下查询它 SELECT ROUND(AVG(`population`),0) AS population, DATE(`time`) AS date FROM `swg_servertracker` WHERE `time` >= DATE(NOW()) - INTERVAL 7 DAY GROUP BY DATE(`time`) DESC LIMIT 7 它会创建一个每日平均值
SELECT ROUND(AVG(`population`),0) AS population, DATE(`time`) AS date
FROM `swg_servertracker`
WHERE `time` >= DATE(NOW()) - INTERVAL 7 DAY
GROUP BY DATE(`time`)
DESC
LIMIT 7
它会创建一个每日平均值,并获取最后7个条目。不幸的是,在中没有按正确的顺序,所以我把它转到了升序。我的问题是,当我把它倒过来(asc
)时,它今天跳过了,又回到了另外一天(今天是10月3日,当我使用升序时,方程中没有考虑到这一点)
我试图将where语句设置为刚才的168小时间隔(也就是7天,但之后相对向后),但在这方面也没有结果。但它今天跳过了,从昨天起又回到了7天
SELECT ROUND(AVG(`population`),0) AS population, DATE(`time`) AS date
FROM `swg_servertracker`
WHERE `time` >= NOW() - INTERVAL 168 HOUR
GROUP BY DATE(`time`)
ASC
LIMIT 7
那么,我今天还有什么办法可以考虑吗?- 您可以在中获取结果集,然后再次对结果进行排序
- 请注意,
子句中定义的别名可以在Select
、groupby
和Having
子句中使用。因此,我使用了别名Order By
,以避免在DATE(time)
和groupby
中重新计算orderby
SELECT dt.population,
dt.date1 AS date
FROM (
SELECT ROUND(AVG(`population`),0) AS population,
DATE(`time`) AS date1
FROM `swg_servertracker`
WHERE `time` >= DATE(NOW()) - INTERVAL 7 DAY
GROUP BY date1
ORDER BY date1 DESC
LIMIT 7
) AS dt
ORDER BY dt.date1 ASC
选择8条记录,而不是7条记录。如果要选择7条最新记录,则必须使用“大于”符号,而不是“大于或等于”符号
几乎正确,我修正了它,因为你说我选择了8条记录。我确实使用了你的代码,只是在间隔时间上做了一点小小的改动,将它切换了6天。这就成功了。我从未意识到我选择了更多的一天,因为我认为今天是在休息时间。
SELECT ROUND(AVG(`population`),0) AS population, DATE(`time`) AS date
FROM `swg_servertracker`
WHERE `time` > NOW() - INTERVAL 7 DAY
GROUP BY DATE(`time`)
ASC
LIMIT 7