如何根据一天预测计数?

时间:2017-05-16 18:32:02

标签: sql-server datetime group-by aggregate-functions

我是SQL Server世界的新手。我有一张桌子如下:

alert_id | create_date | Status
---------+-------------+---------
1231     | 4/15/2017   | Open
1232     | 4/15/2017   | Open
1234     | 4/15/2017   | Closed
1235     | 4/16/2017   | Open

所有这些警报应在30天内关闭。我需要获得一份预测报告,其中显示过去30天内有多少提醒。

我想编写一个选择查询,其输出为2列。首先是日期,第二个是计数。日期列应显示接下来30天的所有日期,计数列应显示当天到期的记录数。下面的东西会起作用。请协助。

date      |   Count
----------+---------
5/15/2017 |  2
5/16/2017 |  3
5/17/2017 |  0
5/18/2017 |  0
.
.
.
6/14/2017 |  0

1 个答案:

答案 0 :(得分:0)

这是GROUP BY和日期算术的工作。在MySQL中:

SELECT DATE(create_date) + INTERVAL 30 DAY expire_date, COUNT(*) num
  FROM tbl
 WHERE status = 'Open'
 GROUP BY DATE(create_date) 

DATE(create_date) + INTERVAL 30 DAY为您提供添加了30天的创建日期值。

GROUP BY(create_date)按照创建日期的值对数据进行分组,截断为午夜。

并且,COUNT(*)GROUP BY一起告诉您每组中有多少条记录。

编辑在最新版本的SQL Server(MS)

SELECT DATEADD(day, 30, CAST(create_date AS DATE)) expire_date, COUNT(*) num
  FROM tbl
 WHERE status = 'Open'
 GROUP BY CAST(create_date AS DATE) 

请注意,日期算术因SQL服务器软件的品牌和型号而异。这就是为什么当你在问题上使用多个标签如[oracle] [mysql] [sql-server]时,你会被评论中的Stack Overflow用户骚扰。

很酷,对吧?您应该阅读聚合查询,有时称为摘要查询。

你不会被他们用零填充错过的日期。这对SQL来说有点难度。