SQL Server中基于时间段的分组/求和数据
我有一个客户表,我想按不同的时间段(如日、周或年)细分增长。为了简化,我们假设只有两列: CustomerID,CreatedOnSQL Server中基于时间段的分组/求和数据,sql,sql-server,Sql,Sql Server,我有一个客户表,我想按不同的时间段(如日、周或年)细分增长。为了简化,我们假设只有两列: CustomerID,CreatedOn 试图掌握这一概念,以便将其应用于我想制作的多份报告。按datepartwk、CreatedOn、datepartdd、CreatedOn、datepartyy、CreatedOn分组 在进行日或周操作时,也要使用年,否则它将在几年内重叠 有关datepart的更多信息,请参见此处:由于您使用的是SQL Server,因此对于某些常见的日期部分,还提供了一些快捷功能。
试图掌握这一概念,以便将其应用于我想制作的多份报告。按datepartwk、CreatedOn、datepartdd、CreatedOn、datepartyy、CreatedOn分组 在进行日或周操作时,也要使用年,否则它将在几年内重叠
有关datepart的更多信息,请参见此处:由于您使用的是SQL Server,因此对于某些常见的日期部分,还提供了一些快捷功能。一些例子: 日期: 周: 年份: 使现代化 运行总样本:
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被索引,它会尽可能好。通常嵌套选择是可怕的…但是考虑到连接在运行的总体情况下是如何工作的,无论如何,您都以相同的方式命中索引,所以在本例中,它只是更具可读性
如果变得更复杂,请查看带有子选择的条件联接。如果一个过程是一个选项,您可以进一步提高性能……但如果您不处理大量数据,这两种方式都没有多大关系。我如何包括一个列,对所有期间进行汇总?@Max-更新以显示一个示例。。很明显,我认为嵌套选择是有害的,但在这种非常特殊的情况下,它们更容易阅读,具有相同的性能。
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)