如何修改我的T-SQL查询,以便输出基于2个不同时期出现两次或更多次的所有记录?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何修改我的T-SQL查询,以便输出基于2个不同时期出现两次或更多次的所有记录?相关的知识,希望对你有一定的参考价值。
我正在使用SQL Server 2014
,我有以下T-SQL查询:
Use MyDatabase
;WITH Query_CTE AS
(
SELECT
ResID, Name,
ArrivalDate, Status,
ProfileID,
ROW_NUMBER() OVER(PARTITION BY [ResID] ORDER BY [StayDate]) AS xy
FROM
(SELECT *
FROM View1) xx
)
SELECT *
FROM Query_CTE
WHERE Query_CTE.[xy] = 1
我需要修改上面的查询,以便输出ArrivalDate
介于'2018-04-01'
and和'2018-12-31'
之间的所有记录,这些记录也存在于基于ArrivalDate
的'2018-04-01'
小于ProfileID
的记录列表中。
我怎样才能做到这一点?
答案
首先,你需要你的CTE的where子句,只获得到达日期在2018-04-01
和2018-12-31
之间的记录。然后你需要添加EXISTS
来检查2018-04-01
之前的记录中是否也存在相同的配置文件ID:
;WITH Query_CTE AS
(
SELECT
ResID
,Name
,ArrivalDate
,Status
,ProfileID
,ROW_NUMBER() OVER(PARTITION BY [ResID] ORDER BY [StayDate]) AS xy
FROM View1 v1
WHERE ArrivalDate >= '2018-04-01'
AND ArrivalDate <= '2018-12-31'
AND EXISTS
(
SELECT 1
FROM View1 v2
WHERE v2.ProfileID = v1.ProfileID
AND v2.ArrivalDate < '2018-04-01'
)
)
SELECT * FROM Query_CTE
WHERE Query_CTE.[xy] = 1
附注:cte中的派生表是完全冗余的,所以我删除了它。
以上是关于如何修改我的T-SQL查询,以便输出基于2个不同时期出现两次或更多次的所有记录?的主要内容,如果未能解决你的问题,请参考以下文章