2016-08-25 10 views
2

私はテーブル(場所と月/日による製品のコスト)を以下の形式で持っており、コストが変更されたときは常にChangeDateの分を取得します。テーブル内の各グループの最小値を別の列に基づいて取得

Cost   Loc Prod  CostChangeStartDate 
------------------------------------------------ 
1.223000000000 5678 12345678 2010-01-03 00:00:00 
1.000000000000 5678 12345678 2010-04-04 00:00:00 
1.223000000000 5678 12345678 2010-05-02 00:00:00 
1.277200000000 5678 12345678 2010-08-01 00:00:00 

そうなって、私は(PartitionByのOrderBy)以上ROW_NUMBER()を使用してみましたが、問題はコスト1.223000000000を2回繰り返しているので、 で、私はきちんとそれを分割することができません:

の予想される出力がある

Cost   Loc  Prod  ChangeDate 
-------------------------------------------------------- 
1.223000000000 5678 12345678 2010-01-03 00:00:00 
1.223000000000 5678 12345678 2010-01-31 00:00:00 
1.223000000000 5678 12345678 2010-02-28 00:00:00 
1.000000000000 5678 12345678 2010-04-04 00:00:00 
1.223000000000 5678 12345678 2010-05-02 00:00:00 
1.223000000000 5678 12345678 2010-05-30 00:00:00 
1.223000000000 5678 12345678 2010-07-04 00:00:00 
1.277200000000 5678 12345678 2010-08-01 00:00:00 
1.277200000000 5678 12345678 2010-08-29 00:00:00 
1.277200000000 5678 12345678 2010-10-03 00:00:00 
3つのレコードのみ。

+0

'選択コスト、LOC、PROD、コスト、LOC、prod'によってyour_table グループからの分(CHANGEDATE) –

+0

@juergendこれはコストが各値にヒットする*最初の時間だけを取得します。例えば。上記のデータで1.223を2回たたきます。 – Blorgbeard

+0

@MANDROID、あなたは本当に '1.223'の値を両方の行で' 2010-01-03'にしますか? –

答えて

3

あなたはLAGを使用して、その前の行に異なるコストを持つ行を取得することができます

select * from (
    select *, lag(cost, 1) over (partition by Loc, Prod order by ChangeDate) prevCost 
    from @products 
) x 
where prevCost is null or cost <> prevCost 
関連する問題