2013-03-22 45 views
0

我在SQL Server中有表。我想在每個組中查找最後一行。我試着用下面的查詢,但它不返回確切的結果。 ID列是PK,其他列設置爲NOT NULL。通過查詢查找組中的最後一行 - SQL Server

select ID, Name FROM 
(select ID, Name, max(ID) over (partition by Name) as MAX_ID 
from Customer) x where ID= MAX_ID 

要更清楚。我有2 queries.First:

ALTER PROCEDURE [dbo].[Ramiz_Musterija_RowNum] 
@Datum DATE, 
@BrojKamiona INT 
AS SET NOCOUNT ON 
SELECT Ime,MusterijaID,RowNum=ROW_NUMBER() OVER(ORDER BY Ime)FROM Musterije 
WHERE [email protected] AND [email protected] GROUP BY Ime,MusterijaID 

和第二單:

ALTER PROCEDURE [dbo].[Ramiz_Musterija_FindLast] 
@Datum DATE, 
@BrojKamiona INT 
AS SET NOCOUNT ON 
SELECT a.* from Musterije a 
JOIN (SELECT Ime, MAX(MusterijaID) AS MAXID FROM Musterije GROUP BY Ime) AS b 
ON a.MusterijaID = b.MAXID AND [email protected] AND [email protected] 

然後LINQ查詢:

var rowNumList = from f in customerFindLastList 
        join r in customerRowNumList 
        on f.MusterijaID equals r.MusterijaID 
        select new { r.RowNum }; 

我試圖找到最後一排每排,再搭配這2查詢MusterijaID列。 任何有關這方面的幫助,將不勝感激。 這是一組的輸出。現在,問題是這兩個查詢匹配「4250」MusterijaID,但我需要匹配「4229」上的查詢。

Ime MusterijaID 
100//1 4246 
100//1 4247 
100//1 4248 
100//1 4249 
100//1 4250 
100//1 4229 
+3

「*不返回準確結果*」 是** **的方式來模糊。你需要更具體。向我們展示一些示例數據和你得到的。或者更好的創建一個例子:http://sqlfiddle.com – 2013-03-22 13:27:26

+0

假設「最後一行」意味着最大的「id」,那麼你的查詢看起來是正確的。 – 2013-03-22 13:37:35

回答

5
select ID, Name 
FROM (select ID, Name, -- add other columns here 
      ROW_NUMBER() over (partition by Name ORDER BY ID DESC) as MAX_ID 
     from Customer) x 
WHERE MAX_ID = 1 
+2

爲什麼這會返回與OP的查詢不同的結果? – 2013-03-22 13:31:44

+0

@a_horse_with_no_name對,對。 – 2013-03-22 13:32:10

+0

@JW。我編輯了我的問題 – 2013-03-22 13:55:09