我正在为一个查询而苦苦挣扎,该查询允许我检查特定日期(大于且小于2个不同条件)。现在我的查询是这样的
WHERE lastupdatedon < (
CASE
WHEN
(
SELECT count(*)
FROM mytable) > 0 THEN
(
SELECT max(date)
FROM mytable)
ELSE getdate()
END)
但是我需要考虑'>'
也在条件检查中,即
- 如果
MyTable
中没有元素,则condition应为LastUpdatedOn < GETDATE()
- 如果
MyTable
中有元素,则条件应为LastUpdatedOn > Max(Date) from MyTable
让我假设将来不会更新日期。如果是这种情况,那么您可以考虑:
WHERE lastupdatedon > ISNULL( (SELECT MAX(date) FROM mytable), '2000-01-01')
注意:虽然我通常更喜欢COALESCE()
,但ISNULL()
(遗憾地)在SQL Server的子查询中更有效。
也就是说,使用>
和遥远的过去的日期。当然,这个逻辑并不完全相同,因为date
可以是表中的NULL
。
另一种选择是:
WHERE (NOT EXISTS (SELECT 1 FROM mytable) AND
lastupdatedon < GETDATE()
) OR
lastupdatedon > (SELECT MAX(date) FROM mytable);