Как найти самый последний день рождения - PullRequest
0 голосов
/ 06 марта 2012

Table1

ID Dateofbirth

001 01/01/1988 'dd/mm/yyyy
002 01/05/2001
....

В таблице table1 я хочу найти самый последний день рождения каждого идентификатора.Самый последний день рождения должен подтверждаться системной датой.

Ожидаемый результат

ID Dateofbirth MostRecentBirthday

001 01/01/1988  01/01/2012
002 01/05/2001  01/05/2011 
....

объяснение выхода

For 001, most recent birthday is 01/01/2012
For 002, most recent birthday is 01/05/2011 ' because still we are not reached this date 01/05/2012

Ответы [ 4 ]

3 голосов
/ 06 марта 2012

Аналогично ответу на предыдущий вопрос:

select ID,
       Dateofbirth,
       dateadd(yy,
               datediff(yy,Dateofbirth,getdate()) -
                           case when dateadd(yy,datediff(yy,Dateofbirth,getdate()),Dateofbirth)>getdate()
                           then 1 else 0 end,
               Dateofbirth) MostRecentBirthday
from ...
0 голосов
/ 06 марта 2012

Эта идея может помочь

SELECT 
  ID, 
  dateofbirth, 
  convert(nvarchar(10), day(dateofbirth)) + "/" + 
  convert(nvarchar(10), month(dateofbirth)) + 
  CASE month(getdate()) > Month(dateofbirth) 
  WHEN TRUE THEN convert(nvarchar(10), year(getdate())) 
          ELSE CASE month(getdate()) < Month(dateofbirth) 
               WHEN TRUE THEN convert(nvarchar(10), Year(getdate())-1) 
                         ELSE CASE day(getdate()) >= day(dateofbirth) 
                                    WHEN TRUE THEN Year(getdate()) 
                                    ELSE Year(getdate())-1) 
                                    END 
                         END 
          END MostRecentBirthday
FROM .....
0 голосов
/ 06 марта 2012

Если вы используете Возраст UDF , тогда запрос может быть просто:

SELECT
  ID,
  Dateofbirth,
  DATEADD(year, dbo.Age(Dateofbirth), Dateofbirth) AS MostRecentBirthday
FROM
  ...
0 голосов
/ 06 марта 2012

Предполагается, что тип столбца DATE (или DATETIME):

SELECT id,
       Dateofbirth,
       CONVERT(date,
         DATEPART(month, Dateofbirth) + '/'
       + DATEPART(day, Dateofbirth) + '/'
       + CASE WHEN DATEPART(month, Dateofbirth) < DATEPART(month, GETDATE()) OR 
                   (DATEPART(month, Dateofbirth) = DATEPART(month, GETDATE()) AND DATEPART(day, Dateofbirth) < DATEPART(day, GETDATE()))
              THEN DATEPART(year, GETDATE())
              ELSE DATEPART(year, GETDATE())-1
         END,
       101) AS MostRecentBirthday
FROM your_table

Не проверено, но должно быть довольно близко.

...