Как условно заменить дату на другую в SQL? - PullRequest
1 голос
/ 24 октября 2019

У меня есть набор данных с большим количеством диапазонов дат. Я хочу создать код, который позволит мне выбирать, скажем, дни за последние 30 дней. Однако я хочу обрезать или исключить дни до начала моего диапазона.

Давайте представим, что мой набор данных таков:

StayID StayStart StayEnd
1      Jan 1     Jan 10
2      Jan 1     Feb 28
3      Feb 1     Feb 10
4      Feb 10    Feb 28

У меня также есть параметр {? ReportStart} идопустим, я установил его на 1 февраля. Сначала я исключил бы все пребывания, которые были до этого, но я также хочу изменить даты так, чтобы все даты были после выбранного диапазона. Мне нужен следующий вывод:

StayID StayStart StayEnd
2      Feb 1     Feb 28
3      Feb 1     Feb 10
4      Feb 10    Feb 28

Я думаю, что должен сделать что-то подобное, но я очень плохо знаком с SQL:

SELECT StayID, 
(SELECT CASE WHEN StayStart < {?ReportStart} THEN {?ReportStart}
    ELSE StayStart
    END
    ) AS StayStart,
StayEnd

Я на правильном пути? Любой совет будет оценен!

1 Ответ

1 голос
/ 24 октября 2019

Кажется, что вы хотите:

select stayId,
       (case when StayStart < {?ReportStart} then {?ReportStart} else StayStart end) as StayStart,
       StayEnd
from t
where stayEnd > {?ReportStart};

Многие базы данных также поддерживают least() и greatest():

select stayId,
       greatest({?ReportStart}, StayStart) as StayStart,
       StayEnd
from t
where stayEnd > {?ReportStart};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...