根据列条件从2个值中选择多个行中的第一个值,否则为第二个值所有行ORACLE

时间:2017-03-30 19:41:39

标签: sql oracle

我在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)

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标准日期格式。   - 注意日期逻辑的更改,以消除对日期的需要。