T-SQL如何获取最后一个CODE组中的第一个项目

时间:2014-09-04 14:50:25

标签: sql-server tsql

示例:

   ID       CODE    DOS
1. 58225111 2730    5/1/2013
2. 58225111 2730    6/1/2013
3. 58225111 2730    7/1/2013
4. 58225111 1930    8/1/2013
5. 58225111 2730    9/1/2013
6. 58225111 2730    10/1/2013
7. 58225111 2730    11/1/2013
8. 58225111 2730    12/1/2013

基本上,我想查询行号5,最新的CODE及其Min DOS如果有意义

我一直在摸索这个问题,我希望有人能指出我正确的方向。

1 个答案:

答案 0 :(得分:1)

我想我明白你想要什么,尽管这个问题还不清楚。

您希望第一行包含最后一个代码,因此在您的示例数据中,它是第5行:58225111 2730 9/1/2013因为它是最后一组行中的第一行相同的代码。

如果我误解了你的意图,请澄清。

此查询应该(可能)为您提供正确的结果。我确信有更好的方法来完成同样的事情,但这是我首先要做的事情。

;WITH AllRows (id, code, dos, r) 
AS 
(
    SELECT id, code, dos, ROW_NUMBER() OVER(ORDER BY id ASC) AS r 
    FROM YourTable
)
SELECT * FROM AllRows 
WHERE r = (
    SELECT MAX(r)+1 
    FROM AllRows 
    WHERE 
      id != (SELECT TOP 1 id FROM YourTable ORDER BY dos DESC) 
      OR
      code != (SELECT TOP 1 code FROM YourTable ORDER BY dos DESC) 
)

Sample SQL Fiddle