SQL:尝试获取未记录的日期

时间:2019-01-14 09:12:13

标签: sql sql-server database join subquery

我有一个表,其中包含当天的(日期和订阅者),有些日子会有我的服务的新订阅者。然后我写了一个查询,查询每天的新订户数(计数)。但是有些天,没有新的订阅者,这些天根本不显示(没有新的订阅者=没有记录)。我希望他们显示,我希望没有新订阅者的记录显示有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)

1 个答案:

答案 0 :(得分:0)

您可以使用master..spt_values。用Type = 'P'查询可以得到0到2047之间的数字。使用DATEADD(DAY, -1 * master..sp_values.number, GETDATE())可以得到最近2048个日期。您可以从此表开始选择,并使用与订户的左联接表获取所有订户。在那之后,COUNT在没有空的日子里也将返回0。

相关问题