2017-11-02 19 views
1
SELECT 
    AVG(
     DATEDIFF(
      day, 
      P.[ProjectCreatedDate], 
      CASE WHEN T.[Reported Milestones] LIKE '02 Request Assigned' THEN T.[TaskActualFinishDate] 
     ) 
    ) AS AverageAssignmentAge 

私は、作成日と要求割り当て日の間の割り当ての平均日を検索しようとしています。それは動作しません、どのように私はこれを修正することはできますか?AVG/Datediff/CASEを使用したSQLクエリ

+1

'case文の後end'を使用してください。 –

+1

残りのクエリといくつかのサンプルデータを投稿し、それが機能しない方法を説明してください。エラーメッセージが表示されたり、正しくない結果が表示されたりしますか?どのDBMSを使用していますか? – Dai

+0

ヒント:複雑な 'SELECT'節がある場合、中間結果を論理的に分離して読みやすくするためにサブクエリを使用する価値があります。残念ながら、SQLでは 'SELECT '内に反復ステップと一時変数が存在しません。 – Dai

答えて

0

ケース式の中でdatediff関数を移動し、そのケース式全体を集計関数内に入れる必要があります。

SELECT 
     AVG(CASE WHEN T.[Reported Milestones] LIKE '02 Request Assigned' THEN 
        DATEDIFF(DAY,P.[ProjectCreatedDate],T.[TaskActualFinishDate]) 
      END) 
     AS averageassignmentage 

NOTEタスク「期間」を扱う「終了日」は、典型的には、「その日の終わり」を参照して、しかし、どのようなDBに記録されていることは、「その日の始まり」に相当されます。したがって、開始日の開始から終了日の始めまでの日数を数えている日付計算に1を追加することはほぼ確実です。

SELECT 
     AVG(CASE WHEN [Reported Milestones] LIKE '02 Request Assigned' THEN 
        DATEDIFF(DAY,[ProjectCreatedDate],[TaskActualFinishDate])+1 
      END) 
     AS averageassignmentage 
    , COUNT(CASE WHEN [Reported Milestones] LIKE '02 Request Assigned' THEN 
        TaskActualFinishDate 
      END) 
     AS sample_size 
from table1 

ResultsSQL Fiddle

CREATE TABLE Table1 
    ([Reported Milestones] varchar(19), [ProjectCreatedDate] datetime, [TaskActualFinishDate] datetime) 
; 

INSERT INTO Table1 
    ([Reported Milestones], [ProjectCreatedDate], [TaskActualFinishDate]) 
VALUES 
    ('02 Request Assigned', '2017-10-01 00:00:00', '2017-10-10 00:00:00'), 
    ('02 Request Assigned', '2017-10-01 00:00:00', '2017-10-10 00:00:00'), 
    ('02 Request Assigned', '2017-10-01 00:00:00', '2017-10-10 00:00:00'), 
    ('xxx', '2017-10-01 00:00:00', NULL), 
    ('xxx', '2017-10-01 00:00:00', NULL) 
; 

クエリ1

テスト/例

| averageassignmentage | sample_size | 
|----------------------|-------------| 
|     10 |   3 | 
+0

あなたの質問は今解決されましたか?あなたはまだこの答えについて質問がありますか? [help/accepting](https://stackoverflow.com/help/someone-answers)の詳細については、[** Click The Tick **](https://ibb.co/ikqyO6) –

関連する問題