首页 > 解决方案 > SQL:试图获取未记录的日期

问题描述

那天我有一张包含(日期和订阅者)的表格,有些日子会有新的订阅者加入我的服务。我写了一个查询,让我得到每天新订户的数量(计数)。但是有些日子,没有新订阅者,这些天根本没有显示(没有新订阅者 = 没有记录)。我希望他们显示,并且我希望没有新订阅者的记录显示有 0 个新订阅者。

例如订阅者表:

Date        Subscribers
03-08-2018   a,b
04-08-2018   a,b,c
05-08-2018   a,c,d
06-08-2018   a,
07-08-2018   a,e,g,k,l

我得到的表:

Date          New_Subs
03-08-2018      2
04-08-2018      1
05-08-2018      1
07-08-2018      4

我应该得到:

Date          New_Subs
03-08-2018      2
04-08-2018      1
05-08-2018      1
06-08-2018      0
07-08-2018      4

PS 我使用函数 min(date) 获取新的潜艇来获取它在数据库中显示的第一个日期

SELECT count(*) Subscribers , convert(varchar, creatingdate, 23)
FROM Payments p
JOIN
(SELECT msisdn , Min(creatingdate) AS day
FROM Payments p
GROUP BY MSISDN) groupedtt 
ON p.MSISDN = groupedtt.MSISDN 
AND p.CreatingDate = groupedtt.day
group by convert(varchar, creatingdate, 23)
order by convert(varchar, creatingdate, 23)

标签: sqlsql-serverdatabasejoinsubquery

解决方案


你可以使用master..spt_values. 查询它Type = 'P'会给你从 0 到 2047 的数字。使用DATEADD(DAY, -1 * master..sp_values.number, GETDATE())给你最后的 2048 日期。您可以使用此表开始您的选择,并使用与订阅者表的左连接来获取所有订阅者。在那之后,对于那些一无所有的日子, COUNT 也将返回 0。


推荐阅读