2017-07-19 9 views
-2
id vid Amount Date 
a 1 10  Today 
a 1 5  Yesterday 
b 2 6  Today 
b 2 7  Yesterday 

今日の金額がidとvidによって昨日の金額よりも多い行を取得する方法。日付カラムは、今日の日付と昨日の複数の値を同じ列で比較する

の日付時刻形式である私が正しく理解して、あなただけのlag()を使用したい場合は、私は結果

+1

編集あなたの質問をして所望の出力を提供します。 –

+2

いいえ、_you_行を取得してください! –

+0

データベースでサポートされている場合は、鉛または遅れを使用します。 –

答えて

1

それは明確ではありませんどのような種類のデータをそこに置くことができますが、このクエリを試すことができます。これにより、昨日の金額がすべて少ない今日の行が返されます。これはMS SQL Serverのためですが、あなたは自分のテーブル名とテーブル変数を置き換えることができますので、ORACLEも、ALL条件をサポートしています。

declare @t table(id char(1), vid int, amount int, date char(10)) 

insert into @t values 
('a', 1, 10, 'Today'), 
('a', 1, 5, 'Yesterday'), 
('b', 2, 6, 'Today'), 
('b', 2, 7, 'Yesterday') 

select * from @t t1 
where t1.date = 'Today' and 
     t1.amount > ALL(select t2.amount from @t t2 
         where t1.id = t2.id and t1.vid = t2.vid and t2.date = 'Yesterday') 
+0

これは動作します。ありがとう –

0

として最初の行が必要になります。

select t.* 
from (select t.*, 
      lag(amount) over (partition by id, vid order by date) as prev_amount 
     from t 
    ) t 
where amount > prev_amount; 
関連する問題