1

顧客ごとに数十の行があり、それぞれに日付とさまざまなステータスを表すいくつかの列があるテーブルを使用しています。特定の列 (特に 0 から 1 または 1 から 0、以下のステータス列を参照) で変更が行われた行を取得することにのみ関心があります。

row_number() over (partition by customer_id, status order by date)ステータスが0と1の間を行ったり来たりするので、単純には使えません。

これが私がやろうとしていることのサンプルです (この例には 2 つの異なる顧客 ID があることに注意してください):

元のテーブル

Row     CustomerID    Status    Date

1                ABC    0   3/12/2013 
2                ABC    0   3/31/2013
3                ABC    1   4/13/2013
4                ABC    1   4/15/2013
5                ABC    1   5/17/2013
6                ABC    0   6/25/2013
7                ABC    0   6/28/2013
8                XYZ    0   8/2/2013
9                XYZ    1   5/10/2013
10               XYZ    0   5/18/2013
11               XYZ    1   8/23/2013
12               XYZ    1   9/7/2013

目的のクエリ出力

Customer ID Status  Date
ABC            1    4/13/2013
ABC            0    6/25/2013
XYZ            1    5/10/2013
XYZ            0    5/18/2013
XYZ            1    8/23/2013
4

2 に答える 2

0

個別の b.CustomerID、b.status、min(b.date) を選択

お客様a、お客様bより

ここで、a.CustomerID = b.CustomerID および a.status <> b.status および a.date < b.date

b.CustomerID、b.status、a.date でグループ化します。

于 2013-09-13T02:24:43.167 に答える