包括基于 SQL 查询的分组日期范围的零计数
Include zero counts for grouping date ranged based SQL query
我正在尝试对具有 created_at
列和 id
列的单个 'sales' table 中每天的销售额进行分组和排序.每条记录都可以在一天中的任何时间创建。我已经设法通过以下查询做到这一点:
SELECT date_trunc('day', created_at::date) AS period, COUNT(id)
FROM sales
GROUP BY period
ORDER BY period
但是,没有显示销售额为 0 的日子。有任何想法吗?
我找到的大多数答案都使用 LEFT JOIN 但我似乎无法让它工作,所以我似乎误解了如何使用它。 :(
提前致谢!
创建一个 table 的临时 returns 所需日期,然后加入它
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)
我正在尝试对具有 created_at
列和 id
列的单个 'sales' table 中每天的销售额进行分组和排序.每条记录都可以在一天中的任何时间创建。我已经设法通过以下查询做到这一点:
SELECT date_trunc('day', created_at::date) AS period, COUNT(id)
FROM sales
GROUP BY period
ORDER BY period
但是,没有显示销售额为 0 的日子。有任何想法吗? 我找到的大多数答案都使用 LEFT JOIN 但我似乎无法让它工作,所以我似乎误解了如何使用它。 :(
提前致谢!
创建一个 table 的临时 returns 所需日期,然后加入它
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)