比较同一列中的多个值

时间:2017-07-19 11:18:40

标签: sql oracle

id  vid Amount  Date
a   1   10      Today
a   1   5       Yesterday
b   2   6       Today
b   2   7       Yesterday   

如何通过id和vid获取今天的金额大于昨天组金额的行。日期列采用今天的日期和昨天的日期时间格式

我要求第一行作为结果

2 个答案:

答案 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;