2017-04-12 18 views
0

私は、タスクが非常に遅れている/遅れている/時間通りの時間に近い場合に返されるクエリを作成したいと考えています。フィールドをSQLで条件付きで返すことは可能ですか?

タスクのステータス:早期 場合は-2時間の日近く

場合-1日遅く

1日

は遅くならば2日間、私が試した何

を変える場合:

SELECT field_1, diff, 
COUNT(CASE WHEN diff <= -2 THEN 1 END) onTime, 
COUNT(CASE WHEN diff <= -1 THEN 1 END) nearOnTime, 
Count(CASE WHEN diff >= 2 THEN 1 END) veryLate, 
Count(CASE WHEN diff >= 0 THEN 1 END) Late 
FROM(
    SELECT field_1, DATEDIFF(day,Max(predicted_date), realization_date) as diff 
    FROM table 
    Group by field_1, realization_date 
    HAVING end_date is not null) as req1 
GROUP BY field_1, diff) 

diff:述語dこれら二つの日付

間の日の数を返し食べたと認識日 =>それは返します

field_1 | diff | onTime | nearOnTime | veryLate | Late 
---------+--------+----------+--------------+------------+------- 
task1 | -3 |  1 |  1  |  0  | 0 
task2 | 2 |  0 |  0  |  1  | 1 

を私は何があるかを返すタスクのステータスに私のオプションは、私のアプローチが悪いと思いますか?

答えて

3

多分これらの線に沿って何か...(フィドルが役立つだろう - これはテストされていません)

SELECT field_1, diff, 
CASE WHEN diff <= -2 THEN 'On Time', 
WHEN diff <= -1 THEN 'nearOnTime', 
WHEN diff >= 2 THEN 'veryLate', 
WHEN diff >= 0 THEN 'Late' 
else 'OK' END as status 
FROM(
    SELECT field_1, DATEDIFF(day,Max(predicted_date), realization_date) as diff 
    FROM table 
    Group by field_1, realization_date 
    HAVING end_date is not null) as req1 
GROUP BY field_1, diff) 
+0

パーフェクトはあなたに感謝!私はちょうどそれが自分自身をahah見つけた –

関連する問題