我有一个客户表,我希望按日,周或年的不同时段分解增长。为了简化,我们假设只有两列:
CustomerID,CreatedOn
尝试掌握这个概念,以便将其应用于我想做的几个报告中。
答案 0 :(得分:2)
按日期部分(wk,CreatedOn),datepart(dd,CreatedOn),datepart(yy,CreatedOn)分组 每天或每周使用年份,否则将在几年内重叠
有关datepart的更多信息,请访问:DATEPART (Transact-SQL)
答案 1 :(得分:0)
由于您使用的是SQL Server,因此某些常见日期部分也有一些快捷方式功能。一些例子:
天:
SELECT Day(CreatedOn), Count(CustomerID)
FROM MyTable
GROUP BY Day(CreatedOn)
周:
SELECT Week(CreatedOn), Count(CustomerID)
FROM MyTable
GROUP BY Week(CreatedOn)
年份:
SELECT Year(CreatedOn), Count(CustomerID)
FROM MyTable
GROUP BY Year(CreatedOn)
运行总样本:
SELECT Day(CreatedOn),
Count(CustomerID),
(Select Count(CustomerID)
From MyTable mts
Where mts.CreatedOn <= CreatedOn) as RunningTotal
FROM MyTable mt
GROUP BY Day(CreatedOn)
注意:此效果不会很好,但如果CreatedOn
被编入索引,则会尽可能好。通常嵌套的选择是可怕的......但考虑到连接如何在一个运行的总体情况下工作,你无论如何都以相同的方式命中索引,所以在这种情况下,它更具可读性。
如果它变得更复杂,请查看带有子选择的条件连接。如果一个程序是一个选项,你可以提高性能......但如果你不处理大量数据,那么无论如何都无关紧要。