如何修改我的T-SQL查询,以便输出基于2个不同时期出现两次或更多次的所有记录?

问题描述 投票:0回答:1

我正在使用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的记录列表中。

我怎样才能做到这一点?

sql sql-server tsql duplicates
1个回答
0
投票

首先,你需要你的CTE的where子句,只获得到达日期在2018-04-012018-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中的派生表是完全冗余的,所以我删除了它。

© www.soinside.com 2019 - 2024. All rights reserved.