无法按数据分组

时间:2019-01-22 12:26:48

标签: sql oracle

输入

A   B    date
--------------------
00  12   22-01-2019
00  12   null
00  25   22-01-2019
00  24   22-01-2019 

从以上数据中,我需要以下输出:

  A   B    date
--------------------
 00  12    null
 00  25    22-01-2019
 00  24   22-01-2019

我需要从表中获取打开,关闭的记录。

如果我使用的日期为空,那么现有的其他记录将不会出现。

我需要在B列中应用条件。

如果列B的日期中有空值,则将显示空值 否则,如果同时存在null和not null值null,则将输出date null。

Select a,b,date 
from table1,table2
where ...
group by a,b,date

2 个答案:

答案 0 :(得分:3)

集合函数忽略空值,因此您需要anaytic version

select a, b, min(date_) keep (dense_rank first order by date_ nulls first) 
  from input group by a, b

demo

答案 1 :(得分:1)

Oracle设置

CREATE TABLE table_name ( A, B, DT ) AS
SELECT 0, 12, DATE '2019-01-22' FROM DUAL UNION ALL
SELECT 0, 12, NULL FROM DUAL UNION ALL
SELECT 0, 25, DATE '2019-01-22' FROM DUAL UNION ALL
SELECT 0, 24, DATE '2019-01-22' FROM DUAL;

查询

SELECT A,
       B,
       CASE
       WHEN COUNT( CASE WHEN DT IS NULL THEN 1 END ) > 0
       THEN NULL
       ELSE MAX( DT )
       END AS DT
FROM   table_name
GROUP BY A, B;

输出

 A |  B | DT       
-: | -: | :--------
 0 | 12 | null     
 0 | 24 | 22-JAN-19
 0 | 25 | 22-JAN-19

db <>提琴here