我有一个包含很多日期范围的数据集。我想构建一个仅让我选择过去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},假设我将其设置为2月1日。首先,我将排除此之前的所有Stays,但我也想修改日期,以便所有日期都在所选范围之后。我想要以下输出:
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
我走对了吗?任何建议将不胜感激!
答案 0 :(得分:1)
似乎想要:
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};