我正在使用以下查询 -
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
的行。如何附加现有代码才能完成此操作?
答案 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
字段中。