PostgreSQL按日期过滤条目,但包括日期为空的缺失条目

时间:2018-09-06 16:34:32

标签: sql postgresql postgresql-10

假设我有一个简单的表格,例如:

CREATE TABLE public.test
(
    id integer NOT NULL,
    d date NOT NULL
)

带有数据:

insert into test values(1, '2018-09-05'::date);
insert into test values(2, '2018-08-05'::date);
insert into test values(2, '2018-07-05'::date);

对于不符合日期过滤条件的记录,我如何以最简单的方式获取日期均为 null 的两个条目? 例如

select id, d from
test where d > '2018-09-01'
union
select id, d from test;

礼物:

 2  "2018-07-05"
 2  "2018-08-05"
 1  "2018-09-05"

我想:

2   "null"
1   "2018-09-05"

不能在跨联合中使用distinct,这不是有帮助。 我也许应该将此表加入自身并做一些事情,但是我不确定是什么。

2 个答案:

答案 0 :(得分:2)

如果我正确理解,可以将条件移至您选择的位置:

SELECT 
    DISTINCT
    id, 
    (case when d > '2018-09-01' then d end) as d 
FROM 
    test 

答案 1 :(得分:1)

我的解决方案:

select distinct 
  t.id,
  (select max(t_max.d) from test t_max where t_max.id = t.id and t_max.d > '2018-09-01')
from test t;

您可以here对其进行测试。