2011-02-27 82 views
0

日期使用SQL Sever的2005比較其他表

表1

ID StartDate EndDate 

001 02/23/2010 07/22/2010 
002 05/03/2010 null 
003 02/02/2011 null 
... 

表2

日期

02/24/2011 
02/25/2011 
... 
... 

條件

  • 如果enddate不爲空,然後startDate從表2 MAX(日)比較,如果開始日期>6個月那麼它應該顯示爲「已過期」

如何使上述條件的查詢。

需要查詢幫助。

+1

請發佈你到目前爲止寫的代碼。人們通常不喜歡只爲你寫代碼。事實上,這是一個工作描述,而不是一個問題。 – 2011-02-27 04:54:07

+2

請嘗試CASE WHEN等問題。這看起來並不困難。 – CarneyCode 2011-02-27 05:01:27

回答

2
Select 
    StartDate, 
    [Status]=Case 
     when DATEDIFF(m,StartDate,(Select MAX(Date) from Table2))>6 
     then 'Expired' 
     Else 'Valid' 
     end 

    From Table1 
    where EndDate is not null 
+0

如果您發佈代碼,XML或數據樣本,請**在文本編輯器中突出顯示這些行,然後單擊編輯器工具欄上的「代碼樣本」按鈕(「{}」)以精確地設置格式並進行語法突出顯示! – 2011-02-27 08:26:34

0
Select Case 
     When EndDate Is Not Null Then EndDate 
     When Table1.StartDate > DateAdd(mm, 6, T2.MaxDate) Then 'Expired' 
     End 
From Table1 
    Cross Join (
       Select Max([Date]) As MaxDate 
       From Table2 
       ) As T2 
0

的問題是不完整的

  1. 如果結束日期不是null,則用的startDate最大(日)從表2
    • 比較如何比較?比...更棒?少於?等於?
  2. 如果開始日期>6個月那麼它應該顯示爲「已過期」

但是讓我們假設你的意思

  1. 如果結束日期不爲空,然後的startDate,最大比較(日期)從表2
    • 它已經過期如果enddate < max(date)
  2. 否則如果開始日期年齡超過6個月那麼它應該顯示爲 「已過期」

然後查詢變得

select 
    case when EndDate < MaxDate then 'Expired' 
     when EndDate is null and StartDate < DateAdd(m,-6,GetDate()) then 'Expired' 
     else 'OK' 
    end 
from Table1 T1 
cross join (select max(date) MaxDate from Table2) T2