我在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个描述,当它具有单位编号的描述时我只需要选择'重新预订全部(1)' (此描述可以多次出现,如下面的结果所示)描述不是'创建的库存标识符'表格a中的相关详细信息以及当这些表格中只有1个描述时,如果'重新预订全部(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)
答案 0 :(得分:1)
一种方法使用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”之后按字母顺序排列的事实。因此desc
中的order by
。
- 我更喜欢ANSI标准日期格式。
- 注意日期逻辑的更改,以消除对日期的需要。