基于SQL Server中的时间段分组/求和数据

时间:2010-02-06 03:13:56

标签: sql sql-server

我有一个客户表,我希望按日,周或年的不同时段分解增长。为了简化,我们假设只有两列:

CustomerID,CreatedOn

尝试掌握这个概念,以便将其应用于我想做的几个报告中。

2 个答案:

答案 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)

See MSDN for full reference.

更新

运行总样本:

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被编入索引,则会尽可能好。通常嵌套的选择是可怕的......但考虑到连接如何在一个运行的总体情况下工作,你无论如何都以相同的方式命中索引,所以在这种情况下,它更具可读性。

如果它变得更复杂,请查看带有子选择的条件连接。如果一个程序是一个选项,你可以提高性能......但如果你不处理大量数据,那么无论如何都无关紧要。