Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/78.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.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 按周对日期和记录进行分组_Sql_Sql Server 2008 - Fatal编程技术网

Sql 按周对日期和记录进行分组

Sql 按周对日期和记录进行分组,sql,sql-server-2008,Sql,Sql Server 2008,我正在使用sql server 2008: 我有一个查询,可以计算每天的任务总数和完成的任务总数 我需要每周有相同的逻辑(而不是几天)。 我不需要每天都有记录(这有关系吗?如果有,我如何才能插入空的天数记录?) 以下是每天统计任务的当前查询: SELECT DATEADD(D, 0, DATEDIFF(D, 0, T.TaskEndDate)) AS 'EndDate', COUNT(T.TaskID)NumOfTasks, COUNT(CASE WHEN T.TaskR

我正在使用sql server 2008:

我有一个查询,可以计算每天的任务总数和完成的任务总数

我需要每周有相同的逻辑(而不是几天)。 我不需要每天都有记录(这有关系吗?如果有,我如何才能插入空的天数记录?)

以下是每天统计任务的当前查询:

SELECT
    DATEADD(D, 0, DATEDIFF(D, 0, T.TaskEndDate)) AS 'EndDate',
    COUNT(T.TaskID)NumOfTasks,
    COUNT(CASE WHEN T.TaskRecordsStatus = 2 THEN T.TaskID END) NumOfCompleteTasks
FROM 
    dwh.Bks_DWH_TaskRecords_V1 T
GROUP BY
    DATEADD(D, 0, DATEDIFF(D, 0, T.TaskEndDate))
ORDER BY 
    DATEADD(D, 0, DATEDIFF(D, 0, T.TaskEndDate)) DESC
这是查询输出(示例为几行):

这是必需的结果:

End Date NumOfTasks NumOfCompleteTasks
2013-01-01 00:00:00.000 10  0
2013-01-07 00:00:00.000 6   1
2013-01-14 00:00:00.000 0   0
2013-01-21 00:00:00.000 0   0
2013-01-28 00:00:00.000 7   3
2013-02-05 00:00:00.000 2   1
2013-02-12 00:00:00.000 0   0

你试过用它吗

GROUP BY DAYOFWEEK(DATEADD(D, 0, DATEDIFF(D, 0, T.TaskEndDate)))
这应该起作用:

SELECT EndDate = Dateadd(week, Datediff(week, 0, T.TaskEndDate), 0), 
       NumOfTasks = COUNT(T.TaskID),
       NumOfCompleteTasks = COUNT(CASE WHEN T.TaskRecordsStatus = 2 THEN T.TaskID END)
FROM 
   dwh.Bks_DWH_TaskRecords_V1 T
GROUP BY
    Dateadd(week, Datediff(week, 0, T.TaskEndDate), 0)
ORDER BY 
    Dateadd(week, Datediff(week, 0, T.TaskEndDate), 0) DESC
用简化的数据

这假设您希望星期一作为一周的第一天,因为日期0是
1900-01-01
,这是一个星期一。

试试看

SELECT
    DATEADD(D, DATEDIFF(D, T.TaskEndDate, 0), 0) AS 'EndDate',
    COUNT(T.TaskID) NumOfTasks,
    SUM(CASE WHEN T.TaskRecordsStatus = 2 THEN 1 ELSE 0 END) NumOfCompleteTasks
FROM 
    dwh.Bks_DWH_TaskRecords_V1 T
GROUP BY
    DATEADD(D, DATEDIFF(D, T.TaskEndDate, 0), 0)
ORDER BY 
    DATEADD(D, DATEDIFF(D, T.TaskEndDate, 0), 0) DESC

对于每个DATEADD with Week中的每周版本更改D,获取以下错误
“DAYOFWEEK”不是公认的内置函数名。
我应该为自己感到羞耻,这太简单了,太可笑了:)
SELECT
    DATEADD(D, DATEDIFF(D, T.TaskEndDate, 0), 0) AS 'EndDate',
    COUNT(T.TaskID) NumOfTasks,
    SUM(CASE WHEN T.TaskRecordsStatus = 2 THEN 1 ELSE 0 END) NumOfCompleteTasks
FROM 
    dwh.Bks_DWH_TaskRecords_V1 T
GROUP BY
    DATEADD(D, DATEDIFF(D, T.TaskEndDate, 0), 0)
ORDER BY 
    DATEADD(D, DATEDIFF(D, T.TaskEndDate, 0), 0) DESC