Sql 当X存在时排除

Sql 当X存在时排除,sql,sql-server-2012,exists,Sql,Sql Server 2012,Exists,我有一个ID的列表,每个ID都有代码和日期。每个ID可以有多个代码和日期。我需要查找仅包含X、Y中的代码X和代码Y的ID,以及早于540天前的日期日期将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')

我有一个ID的列表,每个ID都有代码和日期。每个ID可以有多个代码和日期。我需要查找仅包含X、Y中的代码X和代码Y的ID,以及早于540天前的日期日期将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')
这有用吗

另外,当字段ID在整个表中不是唯一的时,调用它是非常违反标准的。我承认这确实让我有点困惑。

将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')
这有用吗


另外,当字段ID在整个表中不是唯一的时,调用它是非常违反标准的。我承认这确实让我有点困惑。

为了检查给定ID是否满足所有实例的条件,请在不存在的情况下使用与条件相反的方法进行检查。像这样:

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))
)

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

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))
)

我猜你在追求这样的东西:

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) 
    ); 

我猜你在追求这样的东西:

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) 
    ); 

您在数据库中使用的是什么?谢谢,为将来的参考包括所用技术的标签非常有用。您在数据库中使用的是什么?谢谢,为将来的参考包括所用技术的标签非常有用。谢谢,这非常有用。我用ID混淆了我的数据。很抱歉给你带来困惑,这是我在这个网站上的第一篇帖子,我是一个新手。谢谢你抽出时间。我现在要测试这个…从表1中选择*其中id在表1中选择id在其中Date DATEADDdd,-540,当前时间戳和代码在'X','Y'和Date!='0001-01-01“谢谢你的帮助@用户1370407太棒了!现在请把我的回答标记为有帮助或正确。谢谢你的帮助。我用ID混淆了我的数据。很抱歉给你带来困惑,这是我在这个网站上的第一篇帖子,我是一个新手。谢谢你抽出时间。我现在要测试这个…从表1中选择*其中id在表1中选择id在其中Date DATEADDdd,-540,当前时间戳和代码在'X','Y'和Date!='0001-01-01“谢谢你的帮助@用户1370407太棒了!现在请将我的回答标记为有用或正确。