我是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
答案 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来说有点难度。