Please start any new threads on our new
site at https://forums.sqlteam.com. We've got lots of great SQL Server
experts to answer whatever question you can come up with.
Author |
Topic |
jimtimber
Yak Posting Veteran
60 Posts |
Posted - 2014-10-21 : 08:11:52
|
Hi,I'm wanting to reconstruct this:SELECT CASE WHEN Date1 >= Date2 AND Date1 >= Date3 THEN Date1 WHEN Date2 >= Date1 AND Date2 >= Date3 THEN Date2 WHEN Date3 >= Date1 AND Date3 >= Date2 THEN Date3 ELSE Date1 END AS MostRecentDatebut if one of the date fields is null, then it doesn't work. Any ideas how I can get this to work please with nulls? My code is:SELECT dbo.Tbl_FamiliesProgress.FamiliesID, CASE WHEN dbo.spGetMaxFamilyProgressDate(dbo.Tbl_Families.FamiliesID, 'ReApproved') >= dbo.spGetMaxFamilyProgressDate(dbo.Tbl_Families.FamiliesID, 'Approved') AND dbo.spGetMaxFamilyProgressDate(dbo.Tbl_Families.FamiliesID, 'ReApproved') >= dbo.spGetMaxFamilyProgressDate(dbo.Tbl_Families.FamiliesID, 'Proposed termination of approval by ADM') THEN dbo.spGetMaxFamilyProgressDate(dbo.Tbl_Families.FamiliesID, 'ReApproved') WHEN dbo.spGetMaxFamilyProgressDate(dbo.Tbl_Families.FamiliesID, 'Approved') >= dbo.spGetMaxFamilyProgressDate(dbo.Tbl_Families.FamiliesID, 'reApproved') AND dbo.spGetMaxFamilyProgressDate(dbo.Tbl_Families.FamiliesID, 'Approved') >= dbo.spGetMaxFamilyProgressDate(dbo.Tbl_Families.FamiliesID, 'Proposed termination of approval by ADM') THEN dbo.spGetMaxFamilyProgressDate(dbo.Tbl_Families.FamiliesID, 'Approved') WHEN dbo.spGetMaxFamilyProgressDate(dbo.Tbl_Families.FamiliesID, 'Proposed termination of approval by ADM') >= dbo.spGetMaxFamilyProgressDate(dbo.Tbl_Families.FamiliesID, 'reApproved') AND dbo.spGetMaxFamilyProgressDate(dbo.Tbl_Families.FamiliesID, 'Proposed termination of approval by ADM') >= dbo.spGetMaxFamilyProgressDate(dbo.Tbl_Families.FamiliesID, 'approved') THEN dbo.spGetMaxFamilyProgressDate(dbo.Tbl_Families.FamiliesID, 'Proposed termination of approval by ADM') ELSE dbo.spGetMaxFamilyProgressDate(dbo.Tbl_Families.FamiliesID, 'ReApproved') END AS [RecentDate]FROM dbo.Tbl_FamiliesProgress INNER JOIN dbo.Tbl_Families ON dbo.Tbl_FamiliesProgress.FamiliesID = dbo.Tbl_Families.FamiliesIDThank you for any help!JimJim |
|
gbritton
Master Smack Fu Yak Hacker
2780 Posts |
Posted - 2014-10-21 : 08:47:16
|
First off, what do you want to do when you hit nulls? Should they satisfy 'WHEN Date1 >= Date2 AND Date1 >= Date3 THEN Date1' or not? |
|
|
jimtimber
Yak Posting Veteran
60 Posts |
Posted - 2014-10-21 : 08:53:06
|
Hi Gbritton, I just want to know the most recent date of 1,2 or 3. If there is a null in either of the 3 date fields then I still want to know the most recent date.Hope that makes sense. I've tried Coalesce but it didn't like that.ThanksJim |
|
|
gbritton
Master Smack Fu Yak Hacker
2780 Posts |
Posted - 2014-10-21 : 09:33:23
|
"If there is a null in either of the 3 date fields then I still want to know the most recent date."What if all three date fields are null?Instead of a CASE, you could do this:select (SELECT MAX(dt) as maxdate from (values (date1), (date2), (date3)) v(dt)) as maxdate Note that MAX will ignore null values. |
|
|
ElenaSTL
Starting Member
10 Posts |
Posted - 2014-10-21 : 11:13:22
|
Yes, this is interesting. I have never used values in SELECT statement. And what is v(dt) doing here? Without it code doesn't work.declare @date1 dateset @date1 = '01/01/2014'declare @date2 dateset @date2 = '01/02/2014'declare @date3 dateset @date3 = nullselect (SELECT MAX(dt) as maxdate from (values (@date1), (@date2), (@date3)) v(dt)) as maxdate |
|
|
gbritton
Master Smack Fu Yak Hacker
2780 Posts |
Posted - 2014-10-21 : 11:45:49
|
the values clause needs an alias when used like this. It's basically a subquey |
|
|
|
|
|
|
|