Sql 如何在多个列上进行精确匹配并显示最新日期?

Sql 如何在多个列上进行精确匹配并显示最新日期?,sql,sql-server,Sql,Sql Server,我只想显示与最新日期完全匹配的TempString1、TempString2和TempString3。如何精确匹配三个字段并仅显示具有最新日期的行 桌子 输出: TempString1 TempString2 TempString3 Temp4 TempDate ---------------------------------------------------------------------- A A2

我只想显示与最新日期完全匹配的
TempString1
TempString2
TempString3
。如何精确匹配三个字段并仅显示具有最新日期的行

桌子

输出:

TempString1       TempString2    TempString3   Temp4        TempDate
----------------------------------------------------------------------
A                     A2           1            1.01        01/22/2020
A                     A2           2            1.02        01/22/2020
A                     A2           3            1.03        01/23/2020

您可以使用
ROW\u NUMBER()
函数尝试此操作

是一个窗口函数,它为结果集分区内的每一行指定一个顺序整数。对于每个分区中的第一行,行号以一开始

下面显示了ROW_NUMBER()函数的语法:

ROW_NUMBER() OVER (
    [PARTITION BY partition_expression, ... ]
    ORDER BY sort_expression [ASC | DESC], ...
)

SELECT TempString1
    ,TempString2
    ,TempString3
    ,Temp4
    ,TempDate
FROM (
    SELECT TempString1
        ,TempString2
        ,TempString3
        ,Temp4
        ,TempDate
        ,ROW_NUMBER() OVER (
            PARTITION BY TempString1
            ,TempString2
            ,TempString3
            ORDER BY TempDate DESC
            ) AS RN
    FROM YourTable
    ) a
WHERE rn = 1
这是现场直播

在下面的查询中,上述查询的结果被视为名称a的表

SELECT TempString1
    ,TempString2
    ,TempString3
    ,Temp4
    ,TempDate
FROM (
    SELECT TempString1
        ,TempString2
        ,TempString3
        ,Temp4
        ,TempDate
        ,ROW_NUMBER() OVER (
            PARTITION BY TempString1
            ,TempString2
            ,TempString3            
            ORDER BY TempDate DESC
            ) AS RN
    FROM YourTable
    ) a
WHERE rn = 1
两个查询的结果如下所示。

您可以使用
ROW\u NUMBER()

是一个窗口函数,它为结果集分区内的每一行指定一个顺序整数。对于每个分区中的第一行,行号以一开始

下面显示了ROW_NUMBER()函数的语法:

ROW_NUMBER() OVER (
    [PARTITION BY partition_expression, ... ]
    ORDER BY sort_expression [ASC | DESC], ...
)

SELECT TempString1
    ,TempString2
    ,TempString3
    ,Temp4
    ,TempDate
FROM (
    SELECT TempString1
        ,TempString2
        ,TempString3
        ,Temp4
        ,TempDate
        ,ROW_NUMBER() OVER (
            PARTITION BY TempString1
            ,TempString2
            ,TempString3
            ORDER BY TempDate DESC
            ) AS RN
    FROM YourTable
    ) a
WHERE rn = 1
这是现场直播

在下面的查询中,上述查询的结果被视为名称a的表

SELECT TempString1
    ,TempString2
    ,TempString3
    ,Temp4
    ,TempDate
FROM (
    SELECT TempString1
        ,TempString2
        ,TempString3
        ,Temp4
        ,TempDate
        ,ROW_NUMBER() OVER (
            PARTITION BY TempString1
            ,TempString2
            ,TempString3            
            ORDER BY TempDate DESC
            ) AS RN
    FROM YourTable
    ) a
WHERE rn = 1
两个查询的结果如下所示。
Suraj,NexSqLeLee我把18个问题分成两个部分来解释:@ NeqSqLeLee如果这给了你答案,请考虑把它标记为解决方案。这让未来的读者知道它是有用的,并且你获得了声誉,这对获得那些早期特权(比如能够评论别人的问题)非常有帮助。谢谢。Suraj,第18行中的A代表什么?@ NeqSqLeLeulee我把查询分成两个部分来解释。@ NeqSqLeLee如果它提供了答案,请考虑把它标记为解决方案。这让未来的读者知道它是有用的,并且你获得了声誉,这对获得那些早期特权(比如能够评论别人的问题)非常有帮助。谢谢