id vid Amount Date
a 1 10 Today
a 1 5 Yesterday
b 2 6 Today
b 2 7 Yesterday
如何通过id和vid获取今天的金额大于昨天组金额的行。日期列采用今天的日期和昨天的日期时间格式
我要求第一行作为结果
答案 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')
答案 1 :(得分:0)
如果我理解正确,您只想使用lag()
:
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;