SQL中where子句的条件签入

SQL中where子句的条件签入,sql,sql-server,where-clause,Sql,Sql Server,Where Clause,我正在努力寻找一个查询,它允许我在两种不同的情况下检查一个大于或小于2的特定日期。现在我的问题是这样的 WHERE lastupdatedon < ( CASE WHEN ( SELECT count(*) FROM mytable) > 0 THEN ( SELECT max(date) FROM mytable) ELSE getdate() END) 但我需要在条件检验中考虑“>”,即

我正在努力寻找一个查询,它允许我在两种不同的情况下检查一个大于或小于2的特定日期。现在我的问题是这样的

WHERE lastupdatedon < (
CASE
WHEN
  (
         SELECT count(*)
         FROM   mytable) > 0 THEN
  (
         SELECT max(date)
         FROM   mytable)
  ELSE getdate()
END)
<>但我需要在条件检验中考虑“>”,即

若MyTable中并没有元素,那个么条件应该是LastUpdateOnMaxDate from MyTable
让我假设更新日期永远不会出现在未来。如果是这样,那么您可以考虑:

WHERE lastupdatedon > ISNULL( (SELECT MAX(date) FROM mytable), '2000-01-01')
注意:虽然我通常更喜欢COALESCE,但遗憾的是,ISNULL在带有子查询的SQLServer中更有效

也就是说,使用>和一个远在过去的日期。当然,这种逻辑并不完全相同,因为表中的date可以为NULL

另一种选择是:

WHERE (NOT EXISTS (SELECT 1 FROM mytable) AND
       lastupdatedon < GETDATE()
      ) OR
      lastupdatedon > (SELECT MAX(date) FROM mytable);

那么,什么对你所拥有的东西不起作用呢?当你想要表达的东西可以用简单的条件和ANDs和ORs来完成时,不要跳转到CASE表达式IFNULL@Charlieface . . . 非常感谢。这表明我多么喜欢合并。