2012-09-08 32 views
0

我也有類似的這種如何獲得與最大ID行與表的條件在SQL Server

 
id-value-RowInid 
1-xy-1 
1-xx-2 
1-xz-3 
2-xx-1 
2-xr-2 
3-xq-1 
4-xa-1 
4-xc-2 
... 

我需要爲這個表有類似的輸出功能,以獲得最大的RowInid在分離ID組的表

 
1-xz-3 
2-xr-2 
3-xq-1 
4-xc-2 
... 
+0

是,值字段必須是輸出,在不同的行值 – jozi

回答

2

不需要group by或最大所有

select id, value, rowinid from 
(select *, row_number() over (partition by id, order by rowinid desc) rn from yourtable) v 
where rn = 1 
4

你只需要使用 MAX(RowInid)GROUP BY Id, value

SELECT ID, VALUE, MAX(RowInid) FROM myTable GROUP BY ID, VALUE 

編輯:
當你更新你的問題,你可以使用子查詢像這樣得到value領域:

SELECT ID, VALUE, RowInid 
FROM myTable t1 WHERE RowInid = 
(
    SELECT MAX(RowInid) FROM myTable WHERE id = t1.id GROUP BY id 
) 
ORDER BY id ASC; 

您也可以實現用INNER JOIN這是這樣的:

SELECT t2.ID, VALUE, t2.RowInid FROM myTable t1 
INNER JOIN 
(
    SELECT ID, MAX(RowInid) AS RowIniD FROM myTable GROUP BY ID 
) AS t2 
ON t1.ID = t2.ID AND t1.RowInid = t2.RowInid 
ORDER BY t1.ID ASC; 

See this SQLFiddle

在SQL Server中查看更多about GROUP BYMAX

+0

字段必須在輸出 – jozi

+0

@jozi確定。更新了答案。你如何決定'id = 1'的'value = xz'和'id = 2'的'value = xr'? – hims056

+0

值字段是字符串,例如名稱,我們沒有最大值字段 – jozi

0

與嘗試,

使用子查詢來獲取身份證,價值和最大RowInid,

SELECT m1.[Id],m1.Value, m1.RowInid 
    FROM [Practice].[dbo].[myTable] m1 WHERE RowInid = (SELECT MAX(m2.RowInid) FROM [Practice].[dbo].[myTable] m2 WHERE M1.Id = m2.Id GROUP BY Id) 

上面的查詢返回的結果,如: 4-XX-2 3-XX-1 2 -xx-2 1-XX-3

爲升序這種用途中,

SELECT m1.[id],m1.Value, m1.RowInid 
FROM [Practice].[dbo].[myTable] m1 WHERE m1.RowInid = (SELECT MAX(m2.RowInid) FROM [Practice].[dbo].[myTable] m2 WHERE M2.id = m1.id GROUP BY id) ORDER BY m1.id ASC