我有一张表,其中每隔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
它执行的操作将创建每日平均值,并获取最近的7个条目。可悲的是,in的顺序不正确,所以我将其翻转为上升。我的问题是当我反向(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
那么我今天还有办法吗?
答案 0 :(得分:3)
您选择8条记录,而不是7条记录。如果要选择7条最新记录,则必须使用“大于”符号代替“大于或等于”符号。
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
答案 1 :(得分:0)
Select
子句中定义的别名可以在Group By
,Having
和Order By
子句中使用。因此,为了避免在DATE(time)
和Group by
中重新计算,我为Order By
加上了别名。您可以改为:
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