SELECT only the latest date yet within the defined period

Please support our MS SQL advertiser: Intel Parallel Studio Home
Reply

Join Date: May 2008
Posts: 4
Reputation: stonyheng is an unknown quantity at this point 
Solved Threads: 0
stonyheng stonyheng is offline Offline
Newbie Poster

SELECT only the latest date yet within the defined period

 
0
  #1
May 12th, 2008
Hi all experts,

Currently i have a problem coding in sql query and hope someone expert can answer me.

I have a table with the following values (simplified)

Name in_date out_date
able 12/03/2008 14/03/2008
bravo 10/02/2008 17/03/2008
able 18/03/2008 null


Ok so my result if i want to obtain results for a period from 01/03/2008 to 31/03/2008

able 18/03/2008
bravo 10/02/2008 17/03/2008

SO how do we code for this? thanx
Reply With Quote Quick reply to this message  
Join Date: Apr 2008
Posts: 296
Reputation: tesuji is on a distinguished road 
Solved Threads: 42
tesuji tesuji is offline Offline
Posting Whiz in Training

Re: SELECT only the latest date yet within the defined period

 
0
  #2
May 12th, 2008
hi stonyheng,

a simple way to archive a result is a correlated select like this:
  1. SELECT * FROM date_table x
  2. WHERE out_date =
  3. (SELECT max(out_date) FROM date_table y WHERE x.name = y.name)
Unfortunately this does not work properly if you have periods where out_date is not set, that is where out_date is NULL. I will think it over how to factor in NULL values, maybe there is a solution with coalesce(out_date, NOW(*), out_date).

krs,
tesu
Reply With Quote Quick reply to this message  
Join Date: Apr 2008
Posts: 296
Reputation: tesuji is on a distinguished road 
Solved Threads: 42
tesuji tesuji is offline Offline
Posting Whiz in Training

Re: SELECT only the latest date yet within the defined period

 
0
  #3
May 12th, 2008
hi again,

this achieves it:
  1. with temp_table ( name, in_date, out_date )
  2. as ( SELECT name, in_date, coalesce(out_date, '9090-09-09')
  3. as out_date FROM date_table)
  4. SELECT * FROM temp_table x
  5. WHERE out_date = (SELECT max(out_date) FROM temp_table y
  6. WHERE x.name = y.name)
With WITH clause table date_table will be duplicated and all null values of out_date replaced by funny date 9th September, 9090. Replacement is necessary because max() ignores NULL values. I didn't test it with MS SQL Server, but I know SQL Server 2005 also features WITH clause and coalesce function. Possibly date constant must be rewritten, or replace it by getdate().

You can give me a reply, if this also works on MS SQL Server 2005 properly.

krs,
tesu
Reply With Quote Quick reply to this message  
Join Date: May 2008
Posts: 4
Reputation: stonyheng is an unknown quantity at this point 
Solved Threads: 0
stonyheng stonyheng is offline Offline
Newbie Poster

Re: SELECT only the latest date yet within the defined period

 
0
  #4
May 13th, 2008
Originally Posted by tesuji View Post
hi again,

this achieves it:
  1. with temp_table ( name, in_date, out_date )
  2. as ( SELECT name, in_date, coalesce(out_date, '9090-09-09')
  3. as out_date FROM date_table)
  4. SELECT * FROM temp_table x
  5. WHERE out_date = (SELECT max(out_date) FROM temp_table y
  6. WHERE x.name = y.name)
With WITH clause table date_table will be duplicated and all null values of out_date replaced by funny date 9th September, 9090. Replacement is necessary because max() ignores NULL values. I didn't test it with MS SQL Server, but I know SQL Server 2005 also features WITH clause and coalesce function. Possibly date constant must be rewritten, or replace it by getdate().

You can give me a reply, if this also works on MS SQL Server 2005 properly.

krs,
tesu
Hey tesu, thanx alot for the suggestion. Really appreciate that. Thank you.
Reply With Quote Quick reply to this message  
Reply

This thread is more than three months old.
Perhaps start a new thread instead?
Message:



Other Threads in the MS SQL Forum
Thread Tools Search this Thread



About Us | Contact Us | Advertise | DaniWeb | Acceptable Use Policy | RSS Feed

©2003 - 2009 DaniWeb® LLC