如何减少从过去 30 天到现在的 SQL 查询?

Posted

技术标签:

【中文标题】如何减少从过去 30 天到现在的 SQL 查询?【英文标题】:How to decrease SQL Query from last 30 days until now? 【发布时间】:2016-06-23 08:36:22 【问题描述】:

我正在尝试获取过去 30 天的数据量。

SELECT ( Now() - interval 1 month ), 
   Count(flightid) AS count 
FROM   flight 
WHERE  flightstatus = 0 
   AND flightvisibility = 1 
   AND flightvaliddate > Now() 
   AND flightvaliddate >= ( Now() - interval 1 month ) 

现在这工作正常,它只给我 1 行对应于上个月的同一天。

我想要的是从每天到现在的剩余数据。我该怎么做?

我正在使用 mysql

【问题讨论】:

您使用的是什么版本的 SQL?你会在不同的系统上得到不同的答案。 @RichBenner 我正在使用 MySQL。编辑了问题 只有在flightValidate 大于now 时才能获取数据,因为这种情况AND flightvaliddate > Now() AND flightvaliddate >= ( Now() - interval 1 month ) 。顺便说一句,flightvalidatetimestamp 数据类型吗? 使用COUNT 而不使用group by 会将您的结果集折叠成一行。 是的,感谢COUNT 的澄清,我会记住的。 【参考方案1】:

WHERE 子句中的条件错误。

既然你想要过去三十天的每日数据,那么你必须使用GROUP BY

SELECT
    DATE(flightvalidate) AS flightValidateDate,
    Count(flightid) AS count
FROM
    flight
WHERE
    flightstatus = 0
    AND flightvisibility = 1
    AND DATE(flightvaliddate) >= CURDATE() - INTERVAL 1 MONTH 
GROUP BY flightValidateDate
ORDER BY flightvalidate

【讨论】:

以上是关于如何减少从过去 30 天到现在的 SQL 查询?的主要内容,如果未能解决你的问题,请参考以下文章

Presto SQL / Athena:如何从“间隔天到秒”只返回小时、分钟和秒

mysql有多张表如何快速复制表并把数据挪过去?

Oracle 取过去一个小时每分钟的数据应该如何写sql?

从30天到1天,专业视频制作背后的技术探索之路

在 sql asp.net 中获取过去 30 天未登录的用户

如何在全范围内平均减少 SQL 查询的结果行?