0

私はSQLServer2008を使用しています:

1日あたりのタスクの総数と完了したタスクの総数をカウントするクエリがあります

週ごとに同じロジックを使用する必要があります(数日単位)。毎日のレコードは必要ありません(重要ですか?もしそうなら、どうすれば空の日レコードを挿入できますか?)。

以下は、1日あたりのタスクをカウントするための現在のクエリです。

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
2015-06-27 00:00:00.000 1   0
2013-09-17 00:00:00.000 1   0
2013-02-11 00:00:00.000 1   1
2013-02-07 00:00:00.000 4   0
2013-02-06 00:00:00.000 1   0
2013-02-04 00:00:00.000 1   0
2013-01-20 00:00:00.000 2   0
2013-01-19 00:00:00.000 1   0
2013-01-18 00:00:00.000 2   0
2013-01-17 00:00:00.000 5   0

これは必要な結果です:

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
4

3 に答える 3

1

これは機能するはずです:

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

SQL-簡略化されたデータ

これは、日付0が月曜日であるため、月曜日を週の最初の日として指定することを前提としています 1900-01-01

于 2013-02-11T08:36:30.770 に答える
0

使ってみましたか?

GROUP BY DAYOFWEEK(DATEADD(D, 0, DATEDIFF(D, 0, T.TaskEndDate)))
于 2013-02-11T08:24:32.750 に答える
0

試す

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のDを週とともに

于 2013-02-11T09:01:30.447 に答える