sql server函数找到最少N个值

时间:2015-02-06 11:48:40

标签: sql sql-server sql-server-2008-r2 sql-function

我想在select语句中找到最小值;  假设有一个名为findMin的函数,

select
   select min from findMin(firstDate,secondDate,thirdDate,....NDate),
   firstDate,
   secondDate,
   thirdDate,
   .... (having N number of dates)
from
   dateTable

我在sql server 2008 R2中编写findMin函数时遇到了麻烦。

有帮助吗?

由于

2 个答案:

答案 0 :(得分:2)

您可以使用它来查找最早的日期:

SELECT
   MinDate.mDate,
   dt.firstDate,
   dt.secondDate,
   dt.thirdDate
FROM
   dateTable dt
outer apply
(
  SELECT min(mDate)
  FROM (values(firstDate), (secondDate), 
       (ThirdDate), (FourthDate)) x(mDate)
) MinDate

答案 1 :(得分:1)

SQL Server不支持least()greatest()(唉)。如果值永远不是NULL,则以下逻辑很麻烦,但在五个日期中可以满足您的要求:

select (case when date1 <= date2 and date1 <= date3 and date1 <= date4 and date1 <= date5
             then date1
             when date2 <= date3 and date2 <= date4 and date2 <= date5
             then date2
             when date3 <= date4 and date3 <= date5
             then date3
             when date4 <= date5
             then date4
             else date5
         end)

这可以很容易地推广到更多日期。它只需要更多的逻辑。

还有另一种方法是取消数据的转换然后重新聚合。但是,这比仅在一行内进行操作要昂贵得多。