PostgreSQL фильтрует записи по дате, но включает пропущенные с нулевой датой - PullRequest
0 голосов
/ 06 сентября 2018

Допустим, у меня есть простая таблица, такая как:

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"

Невозможно использовать отчетливое объединение, не то чтобы это помогло. Возможно, мне следует присоединиться к этому столу и что-то сделать, но я не уверен, что.

Ответы [ 2 ]

0 голосов
/ 06 сентября 2018

Мое решение:

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;

вы можете проверить его здесь .

0 голосов
/ 06 сентября 2018

Если я правильно понимаю, вы можете переместить условие на ваш выбор:

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