2015-12-09 56 views
0

我使用下面的查詢的所有條目不existng -在一列項在另一列

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中不存在。在這種情況下,date集中不存在Backup_datetime'08'。所以,我想只看到Backup_datetime = '08'這一行。我如何附加現有的代碼來完成這個任務?

回答

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

謝謝。但是如果我不想創建一個單獨的表'cte'並追加現有的查詢呢? – Karver01

+0

@ Karver01更新了答案。 – SQLChao

+0

智能答案。成功了! – Karver01

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值必定出現在具有下一個Backup_datetime值的行的[date]字段中。

Demo here