id vid Amount Date
a 1 10 Today
a 1 5 Yesterday
b 2 6 Today
b 2 7 Yesterday
今日の金額がidとvidによって昨日の金額よりも多い行を取得する方法。日付カラムは、今日の日付と昨日の複数の値を同じ列で比較する
の日付時刻形式である私が正しく理解して、あなただけのlag()
を使用したい場合は、私は結果
id vid Amount Date
a 1 10 Today
a 1 5 Yesterday
b 2 6 Today
b 2 7 Yesterday
今日の金額がidとvidによって昨日の金額よりも多い行を取得する方法。日付カラムは、今日の日付と昨日の複数の値を同じ列で比較する
の日付時刻形式である私が正しく理解して、あなただけのlag()
を使用したい場合は、私は結果
それは明確ではありませんどのような種類のデータをそこに置くことができますが、このクエリを試すことができます。これにより、昨日の金額がすべて少ない今日の行が返されます。これは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')
これは動作します。ありがとう –
として最初の行が必要になります。
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;
編集あなたの質問をして所望の出力を提供します。 –
いいえ、_you_行を取得してください! –
データベースでサポートされている場合は、鉛または遅れを使用します。 –