【发布时间】:2019-01-14 09:12:13
【问题描述】:
那天我有一张包含(日期和订阅者)的表格,有些日子我的服务会有新订阅者。我写了一个查询,让我知道每天新订户的数量(计数)。但是有些日子,没有新订阅者,这些天根本没有显示(没有新订阅者 = 没有记录)。我希望他们显示,并且我希望没有新订阅者的记录显示有 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
P.S 我使用函数 min(date) 获取新的 subs 以获取它在数据库中显示的第一个日期
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)
【问题讨论】:
-
这似乎是一种日历之类的东西。您有一个包含所有日期的日期表,并且您将数据加入其中,这样即使您没有特定日期的任何数据,也会返回您想要的所有日期。
-
这是一个常见问题。我希望我能在 SO 上找到一个很好的示例问题。正如已经提到的,您首先需要一个 calendar 表(谷歌它),然后您需要外部加入它。这是一个示例:dba.stackexchange.com/questions/75473/…
标签: sql sql-server database join subquery