Author |
Topic |
jdelarco
Starting Member
8 Posts |
Posted - 2007-12-05 : 14:22:07
|
I need to select the greatest date from six different fields in each record and identify from which column was selecteddate_1 date_2 date_3 date_4 date_5------ ------ ------ ------ ------010190 010207 010190 010190 010190010190 010190 010305 010190 010190010190 010504 010190 010190 0101901)if greatest is in date_1 then S = 12)if greatest is in date_2 then S = 23)if greatest is in date_3 then S = 34)if greatest is in date_4 then S = 45)if greatest is in date_5 then S = 5Do you have any idea on how to acomplish this?Thanks |
|
TG
Master Smack Fu Yak Hacker
6065 Posts |
Posted - 2007-12-05 : 14:41:34
|
Here is onw way (which assumes your dates are datetime datatype):create table #yourTable (rowid int identity ,date_1 datetime ,date_2 datetime ,date_3 datetime ,date_4 datetime ,date_5 datetime)insert #yourTable (date_1 ,date_2 ,date_3 ,date_4 ,date_5 )select '2007-01-02', '2007-01-01', '2007-01-05', '2007-01-04', '2007-01-03' union allselect '2007-01-05', '2007-01-03', '2007-01-01', '2007-01-04', '2007-01-02' select rowid ,right(max( convert(varchar(23), dt, 121) + col), 6) source ,max(dt) maxDatefrom ( select rowid ,col ,case when cr.col = 'date_1' then date_1 when cr.col = 'date_2' then date_2 when cr.col = 'date_3' then date_3 when cr.col = 'date_4' then date_4 when cr.col = 'date_5' then date_5 end as dt from (select 'date_1' col union select 'date_2' union select 'date_3' union select 'date_4' union select 'date_5') cr cross join #yourTable ) agroup by rowiddrop table #yourTableoutput:rowid source maxDate ----------- ------ ------------------------------------------------------ 1 date_3 2007-01-05 00:00:00.0002 date_1 2007-01-05 00:00:00.000 EDIT:another (better) way is to normalize your design Be One with the OptimizerTG |
 |
|
SwePeso
Patron Saint of Lost Yaks
30421 Posts |
Posted - 2007-12-05 : 14:42:05
|
[code]DECLARE @Sample TABLE (date_1 DATETIME, date_2 DATETIME, date_3 DATETIME, date_4 DATETIME, date_5 DATETIME)INSERT @SampleSELECT '19900101', '20070201', '19900101', '19900101', '19900101' UNION ALLSELECT '19900101', '19900101', '20050301', '19900101', '19900101' UNION ALLSELECT '19900101', '20040501', '19900101', '19900101', '19900101'SELECT date_1, date_2, date_3, date_4, date_5, ( SELECT TOP 1 col FROM ( SELECT 1 AS col, date_1 AS value UNION ALL SELECT 2, date_2 UNION ALL SELECT 3, date_3 UNION ALL SELECT 4, date_4 UNION ALL SELECT 5, date_5 ) AS d ORDER BY value DESC ) AS LatestDateColFROM @Sample[/code] E 12°55'05.25"N 56°04'39.16" |
 |
|
SwePeso
Patron Saint of Lost Yaks
30421 Posts |
Posted - 2007-12-05 : 14:50:20
|
[code]DECLARE @Sample TABLE (date_1 DATETIME, date_2 DATETIME, date_3 DATETIME, date_4 DATETIME, date_5 DATETIME)INSERT @SampleSELECT '19900101', '20070201', '19900101', '19900101', '19900101' UNION ALLSELECT '19900101', '19900101', '20050301', '19900101', '19900101' UNION ALLSELECT '19900101', '20040501', '19900101', '19900101', '19900101'SELECT date_1, date_2, date_3, date_4, date_5, ( SELECT TOP 1 col FROM ( SELECT 1 AS col, date_1 AS value UNION ALL SELECT 2, date_2 UNION ALL SELECT 3, date_3 UNION ALL SELECT 4, date_4 UNION ALL SELECT 5, date_5 ) AS d ORDER BY value DESC ) AS LatestDateCol, ( SELECT MAX(value) FROM ( SELECT date_1 AS value UNION ALL SELECT date_2 UNION ALL SELECT date_3 UNION ALL SELECT date_4 UNION ALL SELECT date_5 ) AS d ) AS MaxDateFROM @Sample[/code] E 12°55'05.25"N 56°04'39.16" |
 |
|
|
|
|