簡體   English   中英

計算每日總計跳過天數的 SQL 查詢

[英]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;

筆記:

  • 如果您有日歷或計數表,請改用它。
  • 如果日期數超過 100,則需要添加OPTION (MAXRECURSION 0)
  • COUNT(bottles)看起來很可疑。 你真的打算SUM(bottles)嗎?
  • 將列轉換為date然后轉換為datetime時間也是可疑的。 目前尚不清楚為什么您需要第一列的datetime時間。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM