如何修改我的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-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中的派生表是完全冗余的,所以我删除了它。

以上是关于如何修改我的T-SQL查询,以便输出基于2个不同时期出现两次或更多次的所有记录?的主要内容,如果未能解决你的问题,请参考以下文章

T-SQL - 如何编写条件连接

如何在这个特定的 T-SQL 查询中使用表变量?

如何进行 T-SQL 查询,其中输出的第一个字母等于一个字符

如何修改此 t-sql 查询以返回不同列名的最大值?

基于多个条件对字段进行排名的 T-Sql 语法

如何以表格格式调用我的输出以便我可以查询它?