比较其他表格中的日期

时间:2011-02-27 04:51:11

标签: sql sql-server sql-server-2005

使用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与来自table2的max(date)进行比较,如果startdate> 6个月后它应显示为“已过期”

如何查询上述情况。

需要查询帮助。

3 个答案:

答案 0 :(得分: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

答案 1 :(得分: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

答案 2 :(得分:0)

问题不完整

  1. 如果enddate不为null,则startDate与table2中的max(date)进行比较
    • 怎么比较?比...更棒?少于?等于?
  2. 如果startdate> 6个月后它应显示为“已过期”
  3. 但我们假设你的意思是

    1. 如果enddate不为null,则startDate与table2中的max(date)进行比较
      • 如果enddate < max(date)
      • 则已过期
    2. 否则 如果startdate 早于 6个月,那么它应显示为“已过期”
    3. 然后查询变为

      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