SQL Server:比较行,在某些值相同时从结果中排除

SQL Server:比较行,在某些值相同时从结果中排除,sql,compare,rows,Sql,Compare,Rows,我有以下SQL Server查询问题 如果在另一行中有一行的发行日期=到期日期,并且如果两行的ID和金额相同,则不应显示这些行 以下是我的表格的简化版本: ID ISSUE_DATE MATURITY_DATE AMOUNT_USD 1 2010-01-01 00:00:00.000 2015-12-01 00:00:00.000 5000 1 2010-01-01 00:00:00.00

我有以下SQL Server查询问题

如果在另一行中有一行的发行日期=到期日期,并且如果两行的ID和金额相同,则不应显示这些行

以下是我的表格的简化版本:

ID      ISSUE_DATE                  MATURITY_DATE            AMOUNT_USD
1       2010-01-01 00:00:00.000     2015-12-01 00:00:00.000      5000
1       2010-01-01 00:00:00.000     2001-09-19 00:00:00.000       700
2       2014-04-09 00:00:00.000     2019-04-09 00:00:00.000       400
1       2015-12-01 00:00:00.000     2016-12-31 00:00:00.000      5000
5       2015-02-24 00:00:00.000     2015-02-24 00:00:00.000      8000
4       2012-11-29 00:00:00.000     2015-11-29 00:00:00.000     10000
3       2015-01-21 00:00:00.000     2018-01-21 00:00:00.000     17500
2       2015-02-02 00:00:00.000     2015-12-05 00:00:00.000     12000
1       2015-01-12 00:00:00.000     2018-01-12 00:00:00.000     18000
2       2015-12-05 00:00:00.000     2016-01-10 00:00:00.000     12000
结果应该是:

ID      ISSUE_DATE                  MATURITY_DATE           AMOUNT_USD
1       2010-01-01 00:00:00.000     2001-09-19 00:00:00.000       700
2       2014-04-09 00:00:00.000     2019-04-09 00:00:00.000       400
5       2015-02-24 00:00:00.000     2015-02-24 00:00:00.000      8000
4       2012-11-29 00:00:00.000     2015-11-29 00:00:00.000     10000
3       2015-01-21 00:00:00.000     2018-01-21 00:00:00.000     17500
1       2015-01-12 00:00:00.000     2018-01-12 00:00:00.000     18000
我尝试了使用self-join,但没有得到正确的结果


提前谢谢

你能试试这样的吗?”“不存在”是这样做的方式

select * from table t1 where not exists (select 'x' from table t2 where t1.issue_date = t2.maturity_date and t1.amount_usd=t2.amount_usd and t1.id = t2.id)

我会考虑对所有重复进行子查询,然后从第一个表中删除它们,如下所示:

select t1.ID
, t1.ISSUE_DATE
, t1.MATURITY_DATE
, t1.AMOUNT_USD  
 FROM
    t1 
LEFT JOIN
(select a.ID
    , a.ISSUE_DATE
    , a.MATURITY_DATE
    , a.AMOUNT_USD
FROM
    t1 a
INNER JOIN
    ti b
) dupes
   on
t1.ID = dupes.ID
   WHERE dupes.ID IS NULL;