2016-09-14 15 views
9

は私の簡体コードです:例外を指定してGROUP BYを実行するにはどうすればよいですか?ここ

SELECT 
    a.user_id as User_ID, 
    min(b.a_day) as Date_from, 
    max(b.a_day) as Date_to, 
    c.code as ID 
FROM a, b, c 
WHERE 
    a_day > (day, -15, getdate()) 
GROUP BY 
    a.user_id, 
    c.code 

クエリは、次のような出力が得られます。

User ID date_from date_to  id  
1234567 2016-06-13 2016-06-13 B 
1234567 2016-06-17 2016-06-17 A 
12345672016-06-18 2016-06-18 A 
1234567 2016-06-19 2016-06-19 A 
1234567 2016-06-20 2016-06-20 A 
1234567 2016-06-21 2016-06-21 C 
1234567 2016-06-22 2016-06-22 C 
1234567 2016-06-23 2016-06-23 D 

私はこのような何か必要があります:私は分()とmaxを(使用する場合

User ID date_from date_to  id 
1234567 2016-06-13 2016-06-13 B 
1234567 2016-06-17 2016-06-20 A 
1234567 2016-06-21 2016-06-22 C 
1234567 2016-06-23 2016-06-23 D 

を)関数をグループ化すると、すべてのレコードが正常に集計されますが、毎日同じIDで日付のみを集計する必要があります。

アイデア?

ありがとうございます。

あなたは GROUP BY句で CASE EXPRESSIONを使用して、条件付きのグループでそれを行うことができます
+0

は、サンプル表データを追加します。 (それは指定された結果を与えます) – jarlh

答えて

4

GROUP BY句として、これを生成します

SELECT 
    a.user_id as User_ID, 
    min(b.a_day) as Date_from, 
    max(b.a_day) as Date_to, 
    c.code as ID 
FROM a, b, c 
WHERE 
    a_day > (day, -15, getdate()) 
GROUP BY 
    a.user_id, 
    c.code, 
    CASE WHEN c.code in ('B','D') THEN b.a_day ELSE 1 END 

c.code = 'B' -> a.user_id,c.code,b.a_day 
c.code <> 'B' -> a.user_id,c.code,1 
+0

あなたの答えをありがとう、しかし、私はより多くのIDを持っているだけで、私はこれらのレコードに依存しているデータを取得することはできません。いくつかの継続日があるかどうかを確認してから、2つのグループ(別々のグループ)に分けてグループを作るべきだと思います。 – aoc24

+0

私は理解していない、あなたはすべての質問に言及する必要があります!ここの問題は何ですか?毎日グループ化すべきコードが増えていますか?彼らはどちらですか? – sagi

+0

申し訳ありません。 IDにはA、B、C、Dなどがあります。私にとって最も重要なことは、同じIDを持つデータを1日と1日の範囲で取得できるようにするソリューションを見つけることです。ちょうど私のコードに別のIDを追加しました。 – aoc24

関連する問題