0

私はこれに似たテーブルを持っています

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
..。

分離されたIDグループでRowInidの最大値を取得するには、同様の出力を持つこのテーブルの関数が必要です

1-xz-3
2-xr-2
3-xq-1
4-xc-2
..。
4

3 に答える 3

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;

このSQLFiddleを参照してください

SQLServerの詳細GROUP BYとを参照してくださいMAX

于 2012-09-08T14:45:05.247 に答える
2

groupbyまたはmaxはまったく必要ありません

select id, value, rowinid from
( select *, row_number() over (partition by id, order by rowinid desc) rn from yourtable ) v
where rn = 1
于 2012-09-09T06:19:17.620 に答える
0

で試してみてください

サブクエリを使用して、ID、値、および最大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
于 2012-09-08T14:59:10.890 に答える