2011-02-27 80 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