У меня есть таблица с несколькими столбцами, но я облегчу ее и просто использую три.
CREATE TABLE TEMPTBL(
empl_id varchar(8),
empl_no varchar(6),
sep_dt date
);
INSERT INTO TEMPTBL
VALUES
('IS000001', '112233', NULL),
('00418910', '112233', '1/1/2019');
Я пытаюсь получить строку, в которой sep_dt равен нулю, или строку, в которойс максимальным значением sep_dt, сгруппированным по полю empl_no.Так что в случае моего примера это будет первая строка, «IS000001» (я просто хочу, чтобы выбор возвращал empl_id).Скажем, вместо Null было '8/6/2018', тогда я бы хотел вернуть '00418910'.
Я пытался, но я знаю, что это неправильно, потому что вы не можете использовать max таким образом:
SELECT empl_id
FROM TEMPTBL empl
WHERE empl_no = '112233' AND (
sep_dt IS NULL OR
MAX(sep_dt)
)
Я знаю, что это должно включать группу или, может быть, объединение.Итак, я придумал это:
SELECT empl_id
FROM TEMPTBL
INNER JOIN (
SELECT empl_no, max(sep_dt) as sep_dt
FROM TEMPTBL
WHERE empl_no = '112233'
GROUP BY empl_no
) emp ON TEMPTBL.empl_no = emp.empl_no AND TEMPTBL.sep_dt = emp.sep_dt
Это даст мне строку с датой в ней, а не с нулевым значением.Так что это будет работать, если все поля sep_dt имеют значения, но если одно в NULL, это не работает, потому что я хочу строку с нулевым значением.Что я скучаю?