[英]SQL Query to Count Daily Totals Skips Days
此查詢計算我們在一個月內生產的瓶子數量並按天分組。 如果當天沒有瓶子生產,那么它會從輸出中跳過,而不是返回生產的 0 瓶。 如果沒有生產瓶子,我如何返回當天的時間戳? 我聽說必須為此使用日歷表。
SELECT CONVERT(datetime,CAST(t_stamp AS DATE)), COUNT(bottles) AS 'Good Bottles'
FROM bottles
WHERE t_stamp
BETWEEN "any date"
AND "any date"
GROUP BY CAST(t_stamp AS DATE)
ORDER BY CAST(t_stamp AS DATE) ASC
電流輸出:
Aug 12, 2019 12:00 am..................4302
Aug 13, 2019 12:00 am..................2302
Aug 17, 2019 12:00 am..................1302
Aug 18, 2019 12:00 am..................4302
期望輸出:
Aug 12, 2019 12:00 am..................4302
Aug 13, 2019 12:00 am..................2302
Aug 14, 2019 12:00 am..................0
Aug 15, 2019 12:00 am..................0
Aug 16, 2019 12:00 am..................0
Aug 17, 2019 12:00 am..................1302
Aug 18, 2019 12:00 am..................4302
您需要生成天數。 一個非常簡單的方法使用遞歸 CTE:
WITH dates as (
SELECT CONVERT(date, "any date1") as dte
UNION ALL
SELECT DATEADD(day, 1, dte)
FROM dates
WHERE dte < "any date2"
)
SELECT d.dte, COUNT(bottles) AS GoodBottles
FROM dates d LEFT JOIN
bottles b
ON CAST(t_stamp as DATE) = d.dte
GROUP BY d.dte
ORDER BY d.dte ASC;
筆記:
OPTION (MAXRECURSION 0)
。COUNT(bottles)
看起來很可疑。 你真的打算SUM(bottles)
嗎?date
然后轉換為datetime
時間也是可疑的。 目前尚不清楚為什么您需要第一列的datetime
時間。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.