我的SQL Server表在同一行中有200个日期:
ID Date1 Data2 Date3 (..) Date200
是否可以找到一行的最小和最大日期?
由于
答案 0 :(得分:0)
一种方法是使用CROSS APPLY
取消行。 无需列出200个日期列(请注意attr.value('local-name(.)','varchar(100)') Like 'Date%'
)。
您可能还会注意到NULL将被省略。
示例强>
Declare @YourTable table (ID int,Date1 date,Date2 date,Date3 date)
Insert into @YourTable values
(1,'2016-01-01','2016-01-15','2016-02-01'),
(2,'2016-02-15',null,null)
Select A.ID
,C.*
From @YourTable A
Cross Apply (Select XMLData=cast((Select A.* For XML RAW) as xml)) B
Cross Apply (
Select MinDate = min(Value)
,MaxDate = max(Value)
From (
Select Value = attr.value('.','date')
From B.XMLData.nodes('/row') as A(r)
Cross Apply A.r.nodes('./@*') AS B(attr)
Where attr.value('local-name(.)','varchar(100)') Like 'Date%'
) S
) C
<强>返回强>
ID MinDate MaxDate
1 2016-01-01 2016-02-01
2 2016-02-15 2016-02-15
修改 - 另一个选项
Select A.ID
,C.*
From @YourTable A
Cross Apply (
Select MinDate = min(Value)
,MaxDate = max(Value)
From (values (A.Date1)
,(A.Date2)
,(A.Date3)
-- .. More Columns
) C1 (Value)
) C