以下示例:
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)姓名。
答案 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