查询以返回最新数据

时间:2018-01-29 19:54:29

标签: sql-server tsql

以下示例:

ID   Name   Date
1    A      2018-01-29
2    B      2018-01-29
3    A      2018-01-28

我正在寻找一个查询来返回第二行,即2 B 2018-01-29

选择条件适用于所有最新记录,选择一个与上一个日期组相比具有不同名称的记录。

所以,从我的例子来看,最近的日期是2018-01-29,候选行是Id:1和Id:2,但是我选择Id:2,因为它有Name:B,它不同于上一个日期' s(2018-01-28)姓名。

1 个答案:

答案 0 :(得分:0)

试试这个:

DECLARE @Tab TABLE(ID INT, NAME VARCHAR(5), DATE DATE)

INSERT INTO @Tab VALUES(1,'A','2018-01-29')
INSERT INTO @Tab VALUES(2,'B','2018-01-29')
INSERT INTO @Tab VALUES(3,'C','2018-01-29')
INSERT INTO @Tab VALUES(4,'A','2018-01-28')

SELECT TOP 1 ID,NAME,DATE 
FROM(
    SELECT *
        ,DENSE_RANK() OVER(ORDER BY DATE DESC)RN 
    FROM @Tab
    )D
WHERE D.RN=1
    AND D.NAME NOT IN(
            SELECT NAME 
            FROM(
                SELECT *
                    ,DENSE_RANK() OVER(ORDER BY DATE DESC)RN  
                FROM @Tab
                )D 
            WHERE RN>1)

<强>结果:

ID  NAME    DATE
2   B       2018-01-29