PostgreSQL按日期筛选条目,但包括空日期的遗漏条目

问题描述 投票:0回答:2

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

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);

我怎么能以最简单的方式获得两个条目,对于不符合日期过滤器的记录,日期为空?例如。

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"

不能使用不同的联盟,而不是它会有所帮助。我应该加入这张桌子并做一些事情,但我不确定是什么。

sql postgresql postgresql-10
2个回答
2
投票

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

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

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

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.