【问题标题】:Include zero counts for grouping date ranged based SQL query包括对基于日期范围的 SQL 查询进行分组的零计数
【发布时间】:2021-12-28 17:37:11
【问题描述】:

我正在尝试从具有created_at 列和id 列的单个“销售”表中对每天的销售数量进行分组和排序。每条记录都可能在一天中的任何时间创建。我设法通过以下查询做到了这一点:

SELECT date_trunc('day', created_at::date) AS period, COUNT(id)
FROM sales
GROUP BY period
ORDER BY period

但是,没有显示销售额为 0 的日期。有任何想法吗? 我发现的大多数答案都使用 LEFT JOIN 但我似乎无法让它工作,所以我似乎误解了如何使用它。 :(

提前谢谢你!

【问题讨论】:

    标签: sql group-by left-join


    【解决方案1】:

    创建一个返回所需日期的临时表,然后加入它

    DECLARE @StartDateTime DATETIME
    DECLARE @EndDateTime DATETIME
    
    SET @StartDateTime = '2015-01-01'
    SET @EndDateTime = '2015-01-12';
    
    WITH DateRange(DateData) AS 
    (
        SELECT @StartDateTime as Date
        UNION ALL
        SELECT DATEADD(d,1,DateData)
        FROM DateRange 
        WHERE DateData < @EndDateTime
    )
    
    SELECT DateRange.DateData, Count(sales.id)
      FROM sales
      right join DateRange on sales.date = DateRange.DateData
      group by DateRange.DateData
    
    OPTION (MAXRECURSION 0)
    

    【讨论】:

    • 谢谢。我会试一试,但只是好奇是否有任何方法可以在不创建临时表的情况下做到这一点?
    • 嗨,RDW,我认为没有其他方法
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多