Mysql SQL日期不是相对的

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 它会创建一个每日平均值

我有一个表,其中每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个条目。不幸的是,在中没有按正确的顺序,所以我把它转到了升序。我的问题是,当我把它倒过来(
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