sql日期不相关

tvz2xvvm  于 2021-06-20  发布在  Mysql
关注(0)|答案(2)|浏览(456)

我有一个表,每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 )它跳过了今天,又回到了一天(今天是十月三日,我用升序的时候,等式中没有考虑到这一点)
我试着将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


那么,有没有什么方法可以让我也考虑到今天的情况呢?

yjghlzjz

yjghlzjz1#

可以在派生表中获取结果集,然后再次对结果进行排序。
注意,在mysql中,在 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
vwhgwdsa

vwhgwdsa2#

选择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

相关问题