Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL Server中基于时间段的分组/求和数据_Sql_Sql Server - Fatal编程技术网

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

SQL Server中基于时间段的分组/求和数据,sql,sql-server,Sql,Sql Server,我有一个客户表,我想按不同的时间段(如日、周或年)细分增长。为了简化,我们假设只有两列: CustomerID,CreatedOn 试图掌握这一概念,以便将其应用于我想制作的多份报告。按datepartwk、CreatedOn、datepartdd、CreatedOn、datepartyy、CreatedOn分组 在进行日或周操作时,也要使用年,否则它将在几年内重叠 有关datepart的更多信息,请参见此处:由于您使用的是SQL Server,因此对于某些常见的日期部分,还提供了一些快捷功能。

我有一个客户表,我想按不同的时间段(如日、周或年)细分增长。为了简化,我们假设只有两列:

CustomerID,CreatedOn


试图掌握这一概念,以便将其应用于我想制作的多份报告。

按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)