Сложная постановка дела - если дата окончания равна нулю, переходите к предыдущему этапу - PullRequest
0 голосов
/ 23 марта 2020

Если дата окончания равна нулю, то принять предыдущий этап

Contract_no     Contract_phase      end_date 
100     Draft           01/01/2020
100     Review          01/02/2020
100     Executed        01/03/2020
100     Completed

200     draft           01/01/2020
200     Review          01/02/2020
200     Executed

300     draft           01/01/2020
300     Review          01/02/2020
300     Executed        01/03/2020
300     Completed       01/04/2020

select Contract_no,Contract_phase
where completion date between 01/01/2020 and 01/04/2020

Я вытягиваю эти контракты по датам окончания. Существуют ситуации, когда дата окончания равна нулю, когда последний этап еще не закрыт в системе. Правильная фаза не выбрана из-за нулевой даты окончания. Клиент хочет, чтобы мы выбрали предыдущую фазу, если текущая фаза имеет нулевую дату окончания. Как сделать так, чтобы в этом случае был выбран предыдущий этап?

1 Ответ

0 голосов
/ 23 марта 2020

Я думаю, вам просто нужно агрегировать здесь:

SELECT
    Contract_no
FROM yourTable
GROUP BY
    Contract_no
HAVING
    MAX(end_date) BETWEEN date '2020-01-01' AND date '2020-04-01';

Это должно работать, потому что MAX по умолчанию просто игнорирует NULL значения, поэтому дата предыдущего этапа будет использоваться в случае, если позже один будет отсутствовать. Между прочим, это предполагает, что все фазы будут происходить в хронологическом порядке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...