2017-02-11 10 views
1

Моя таблица SQL Server имеет 200 дат в той же строке:SQL макс сервера и мин дата в строке

ID Date1 Data2 Date3 (..) Date200 

Можно ли найти Min и Max дата одной строки?

Благодаря

+0

ли вы имеете в виду что-то вроде SELECT MAX (Date1) FROM Table или SELECT MIN (Date1) FROM Table? – Fendec

+0

Какие RDMS вы используете –

ответ

0

Один метод использует для CROSS APPLY UNPIVOT строки. Не нужно указывать столбцы 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 

Edit - Другой вариант

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 
Смежные вопросы