2014-09-04 26 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

相關問題