我有下面的oracle sql
select * from a
where a.description in
('Rebook All (1)', 'Created stock identifier')
and a.date between '03/18/2017 00:00:01'
AND '03/25/2017 00:00:00'
and a.unit = '38240007294677'
现在,结果可以有两个描述,如下面针对单元号的描述,或者可以有1个描述,当它具有对单元号的两个描述时,我只需要选择“Rebook all (1)”(该描述可以多次出现,如下面在results中所示),表A中的描述不是“创建的股票标识符”及其相关细节,并且当它只有这2个中的1个描述时,如果“Rebook All (1)”不在那里,则选择“创建的股票标识符”,反之亦然。如何选择?提前谢谢。
Date Description
3/20/2017 10:11:12.769000 AM创建的股票标识符
3/20/2017 10:10:47.775000 AM创建的股票标识符
3/20/2017 10:10:47.782000 AM创建的股票标识符
3/20/2017 8:14:41.696000 PM全部重订(1)
3/20/2017 8:14:41.885000 PM全部重订(1)
3/20/2017 8:13:51.622000 PM全部重订(1)
发布于 2017-03-31 03:46:03
一种方法是使用rank()
select a.*
from (select a.*,
rank() over (partition by unit order by description desc) as seqnum
from a
where a.description in ('Rebook All (1)', 'Created stock identifier')
a.date >= date '2017-03-18' and
a.date < date '2017-03-25' and
a.unit = '38240007294677'
) a
where seqnum = 1;
注:-这利用了"Rebook“在"Created”之后按字母顺序排列的事实。因此,order by
中使用了desc
。-我更喜欢ANSI标准日期格式。-注意对日期逻辑的更改,以消除对日期时间的需要。
https://stackoverflow.com/questions/43126974
复制相似问题