2014-09-04 29 views
-3

例中的第一项:T-SQL如何获得最后一个码组

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行,最当前的代码以它的MIN DOS如果是有道理的

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

+0

是什么让该行特别?你真的需要更好地描述你的问题。标题应该反映你的问题,而不是通用的。 – jpw 2014-09-04 14:53:10

+0

您应用了哪些条件来选择这些行? – 2014-09-04 14:54:00

+0

如何识别行?它是否总是按特定的列和方向排列的第n个?该行中的一个字段是固定值吗? – MeanGreen 2014-09-04 14:54:32

回答

1

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

您希望第一行包含最后一个代码,因此在您的示例数据中,它是第五行: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

+0

对不起所有的困惑,并感谢jpw阅读我的想法。当表中有多个ID时,您提供的查询不起作用。 – Jake 2014-09-04 15:54:49

+0

您能否提供一个使其失败的数据示例以及预期的输出结果。这可能是查询中的一个小错误。 – jpw 2014-09-04 16:01:26

+1

http://www.sqlfiddle.com/#!6/0041a/1 虽然我读过很多文章,但这是我第一次发表。我将寻找一些关于如何正确发布的指南...... – Jake 2014-09-04 16:17:08

相关问题