在一列中的条目不存在于另一列的所有条目中

时间:2015-12-09 15:01:42

标签: sql-server sql-server-2008

我正在使用以下查询 -

 Select B.Backup_datetime, E.date    
    from Table B
            cross apply 
                (select max(E.Backup_datetime) date
                from Table E
                where E.Backup_datetime<B.Backup_datetime) E

创建以下结果 -

Backup_datetime     date 
     08              07       
     07              05
     05              04
     04              03

现在,我希望在Backup_datetime的整个集合中看到date的行。在这种情况下,'08'集合中不存在来自Backup_datetime的{​​{1}}。所以,我想只看到date = Backup_datetime的行。如何附加现有代码才能完成此操作?

2 个答案:

答案 0 :(得分:0)

这应该这样做。我使用了一个cte,所以我可以引用你的原始查询,而不必多次写它。

;with cte as
(
Select B.Backup_datetime, E.date    
    from Table B
            cross apply 
                (select max(E.Backup_datetime) date
                 from Table E
                 where E.Backup_datetime<B.Backup_datetime) E
)

SELECT * FROM cte where backup_datetime NOT IN (select date from cte)

或者如果你不想使用cte

Select 
    B.Backup_datetime
  , E.date    
from Table B
  cross apply 
   (select max(E.Backup_datetime) date
    from Table E
    where E.Backup_datetime<B.Backup_datetime)
where
backupdate not in
  (Select E.date    
        from Table B
                cross apply 
                    (select max(E.Backup_datetime) date
                     from Table E
                     where E.Backup_datetime<B.Backup_datetime))

答案 1 :(得分:0)

只需使用:

SELECT TOP 1 B.Backup_datetime, E.[date]    
FROM Table B
CROSS APPLY (
   SELECT MAX(E.Backup_datetime) AS [date]
   FROM Table E
   WHERE E.Backup_datetime<B.Backup_datetime) E
ORDER BY B.Backup_datetime DESC

只有最顶层的记录包含Backup_datetime字段中不存在的[date]值。任何其他记录的Backup_datetime值必定存在于具有下一个[date]值的行的Backup_datetime字段中。

Demo here