1

我有一个 ID 列表,每个 ID 都有一个代码和一个日期。每个 ID 可以有多个代码和日期。我需要找到仅包含代码 X 和代码 Y((X,Y)中的代码)以及早于 540 天前的日期的 ID (Date <= DATEADD(dd, -540, CURRENT_TIMESTAMP))

由于一个 ID 可以有多个代码和日期,我需要排除那些不符合上述条件的 ID。下面是一个例子。

  ID   Code Date

  5525  X   2010-10-07 
  5525  Y   2010-11-25 
  5525  Y   2010-11-29 
  5525  Y   2010-10-06 
**5525  X   2011-01-14** 
**5525  X   2011-01-31**
  5525  Y   2010-12-09
  5525  Y   2010-10-15 
  5525  X   2010-10-18 
  5525  Y   2010-12-08 
  5525  X   2010-12-09

因为两个突出显示的 ID 的日期大于 -540 天前,我需要排除所有 ID,即使它符合我的原始标准。

我需要包含符合我的条件的 ID (code in (X,Y) and Date <= DATEADD(dd, -540, CURRENT_TIMESTAMP)),但如果具有相同值的另一个 ID 不符合此条件,则不需要。

select ID from table
where code in (X,Y)
and date <= DATEADD(dd, -540, CURRENT_TIMESTAMP)
4

3 回答 3

1

我猜你在追求这样的事情:

SELECT t1.ID FROM table_x t1
 WHERE 
    t1.Date <= DATEADD(dd, -540, CURRENT_TIMESTAMP) AND
    -- you can add other criterias here as well, like t1.Code in (X,Y)
    t1.ID NOT IN (
       SELECT ID FROM table_x t2
        WHERE 
          t2.Date > DATEADD(dd, -540, CURRENT_TIMESTAMP)
          -- you can add other criterias here as well, like t2.Code in (Z,F) 
    ); 
于 2012-05-02T15:59:59.643 回答
0

将该NOT IN子句与子查询一起使用:

SELECT *
FROM table1
WHERE id NOT IN (
    SELECT id 
    FROM table1
    WHERE Date <= DATEADD(dd, -540, CURRENT_TIMESTAMP)    
)
AND code in ('X','Y')

这有帮助吗?

IDPS 当一个字段在整个表中不是唯一的时调用它是相当“反标准”的。我承认这确实让我有点困惑。

于 2012-05-02T15:57:24.573 回答
0

为了检查给定 ID 是否满足所有实例的条件,请使用WHERE NOT EXISTS与您的条件相反的条件执行 a。像这样:

SELECT ID, Code, [Date]
FROM tablename t
WHERE NOT EXISTS (
    SELECT *
    FROM tablename
    WHERE ID = t.ID AND NOT (
        Code IN ('X','Y')
        AND [Date] <= DATEADD(dd, -540, CURRENT_TIMESTAMP))
)
于 2012-05-02T15:59:27.977 回答