Sql server 按年、月、日分组时的SQL Server问题
在下面的查询中,我从“FileSize”列中获取过去的6行,并将它们合计到单独的“previous”列中。我需要的是将结果按年、月、日分组 这就是我所拥有的:Sql server 按年、月、日分组时的SQL Server问题,sql-server,group-by,Sql Server,Group By,在下面的查询中,我从“FileSize”列中获取过去的6行,并将它们合计到单独的“previous”列中。我需要的是将结果按年、月、日分组 这就是我所拥有的: SELECT DATEPART(DAY,CompleteTime ) , SUM(ja.FileSize) , SUM(FileSize) OVER (ORDER BY DATEPART(DAY,CompleteTime ) ROWS BETWEEN 5 PRECEDING AND CURRENT ROW) as previous
SELECT DATEPART(DAY,CompleteTime )
, SUM(ja.FileSize)
, SUM(FileSize) OVER (ORDER BY DATEPART(DAY,CompleteTime ) ROWS BETWEEN 5 PRECEDING AND CURRENT ROW) as previous
FROM Jobs_analytics ja
WHERE CompleteTime Between '2020-7-13 00:00:00' AND GETDATE()
GROUP BY DATEPART(DAY,CompleteTime )
但是,SQL希望我将FileSize
添加到GROUPBY子句中。但当我这样做时,我会得到结果集中的每个文件。由于SUM(FileSize)OVER(ORDERBY DATEPART(DAY,CompleteTime)行位于前5行和当前行之间)作为前一行
在SUM
函数中,我认为我不需要将其包含在group BY子句中
我是否可以按年、月、日对结果集进行分组?当您要求和时,它希望求和列
FileSize
:
SUM(SUM(FileSize)) OVER (ORDER BY DATEPART(DAY,CompleteTime ) ROWS BETWEEN 5 PRECEDING AND CURRENT ROW) as previous
当您要求和时,它需要求和列
FileSize
:
SUM(SUM(FileSize)) OVER (ORDER BY DATEPART(DAY,CompleteTime ) ROWS BETWEEN 5 PRECEDING AND CURRENT ROW) as previous
内部sum()
负责组聚合。outersum()over()
是一个分析函数,用于查看前面的行(现在这些行被分组并进行求和)
请小心使用datepart(day,…)
,因为它将返回一个从1到31的值,并且一旦您将日期范围扩展到足以覆盖多个在同一个月的同一天的日期,它将与其他月/年发生冲突。内部sum()
负责处理组聚合。outersum()over()
是一个分析函数,用于查看前面的行(现在这些行被分组并进行求和)
小心使用
datepart(day,…)
,因为它将返回一个从1到31的值,并且一旦您将日期范围扩展到足以覆盖多个在同一个月的同一天的日期,它将与其他月份/年发生冲突。您尝试过SUM(SUM(FileSize))?现在我觉得自己像个白痴,是的,这在答案中起到了作用,我给你信任。不用担心,这发生在我们所有人身上。你有没有打算一次运行超过一个月的时间?如果是这样的话,那就不是正确的分组。你试过SUM(SUM(FileSize))吗?现在我觉得自己像个白痴,是的,答案中有这样一个位置,我给你信任度。不用担心,这发生在我们所有人身上。你有没有打算一次运行这个超过一个月的时间?如果是这样,那么这不是正确的分组。