Sql 如何汇总给定周和每个工作日的总数?
我目前正在尝试构建逻辑,根据报告运行的日期,该逻辑将独立计算当前一周中的每一天。我需要弄清楚如何构建一个查询,将每天和每周的总和作为单独的列进行聚合 下面我只提供了我将用于总计和星期日的子查询:Sql 如何汇总给定周和每个工作日的总数?,sql,sql-server,tsql,count,aggregate,Sql,Sql Server,Tsql,Count,Aggregate,我目前正在尝试构建逻辑,根据报告运行的日期,该逻辑将独立计算当前一周中的每一天。我需要弄清楚如何构建一个查询,将每天和每周的总和作为单独的列进行聚合 下面我只提供了我将用于总计和星期日的子查询: DECLARE @SundayOfCurrentWeek date , @MondayOfCurrentWeek date , @TuesdayOfCurrentWeek date , @WednesdayOfCurrentWeek date , @ThursdayOfCurrentWeek da
DECLARE
@SundayOfCurrentWeek date
, @MondayOfCurrentWeek date
, @TuesdayOfCurrentWeek date
, @WednesdayOfCurrentWeek date
, @ThursdayOfCurrentWeek date
, @FridayOfCurrentWeek date
, @SaturdayOfCurrentWeek date
set @SundayOfCurrentWeek = DATEADD(wk, DATEDIFF(wk,0,getdate()), -1)
set @MondayOfCurrentWeek = DATEADD(wk, DATEDIFF(wk,0,getdate()), 0)
set @TuesdayOfCurrentWeek = DATEADD(wk, DATEDIFF(wk,0,getdate()), 1)
set @WednesdayOfCurrentWeek = DATEADD(wk, DATEDIFF(wk,0,getdate()), 2)
set @ThursdayOfCurrentWeek = DATEADD(wk, DATEDIFF(wk,0,getdate()), 3)
set @FridayOfCurrentWeek = DATEADD(wk, DATEDIFF(wk,0,getdate()), 4)
set @SaturdayOfCurrentWeek = DATEADD(wk, DATEDIFF(wk,0,getdate()), 5)
/**选择一周内的总记录**/
( select count(*)
from release
where releasetime >= @SundayOfCurrentWeek
AND releasetime <= @SaturdayOfCurrentWeek ) as TotalCount
/**选择截至星期日的所有记录**/
( select count(*) as SundayCount
from release
where releasetime >= @SundayOfCurrentWeek
AND releasetime < @MondayOfCurrentWeek ) as SundayCount
试试这个
SELECT
DATEPART(DW, [date_col]) AS 'Day_of_Week',
COUNT(*) AS 'Count_per_Day'
FROM [Table]
GROUP BY DATEPART(DW, [date_col])
请注意,星期天=1表示星期天,7表示星期六
;WITH cte AS (
SELECT
DATENAME(dw,releasetime) as DayOfWeekName
,COUNT(*) OVER () as TotalCount
FROM
@release
WHERE
releasetime >= DATEADD(DAY,- DATEPART(dw,GETDATE()) + 1,CAST(GETDATE() AS DATE))
AND releasetime < DATEADD(DAY,7 - DATEPART(dw,GETDATE()) + 1,CAST(GETDATE() AS DATE))
)
SELECT *
FROM
cte
PIVOT (
COUNT(DayOfWeekName)
FOR DayOfWeekName IN (Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday)
) p
绝对推荐熟悉窗口功能
编辑,更改where语句中的日期比较。它将自动计算出本周的星期日,然后计算出下周的星期日。下个星期的星期天的原因是我把它从
COUNT(*) OVER (ORDER BY DATEPART(dw,releasetime))