我在Transact SQL查询中写一个表达式,以查找每个记录的最少两个日期时间a,b,其中a不能为null,但b可以为null(在这种情况下返回a)。
我有以下内容,我认为是正确的,甚至可能是有效的,但肯定很难看。
我们可以做得更好吗?
case when b is null then a else (case when b < a then b else a end) end as min_datetime
在SQL Server中,您可以使用横向联接来执行此操作。正确的语法是:
select t.*, v.min_dte
from t cross apply
(select min(v.dte) as min_dte
from values ( (t.a), (t.b) ) v(dte)
) v;
随着值的数量变大,这非常方便。但是,性能可能会比单个表达式稍差(但不会差很多)。
至于单个表达式,我将寻求:
case when b is null or a < b then a else b end as min_datetime
其性能应基本上与您的表达相同。我觉得这个版本更简单。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句