1

私はこのテーブルを持っています:

ID                                   Version    IdRoot
887063C3-E1E5-4E76-9EE6-A08300C1DE2E    1       887063C3-E1E5-4E76-9EE6-A08300C1DE2E
ED482E87-D36C-4E50-A6E7-A08300C1DE3C    2       887063C3-E1E5-4E76-9EE6-A08300C1DE2E`
735604E4-25FD-4575-BD88-A08300C1DE41    1       735604E4-25FD-4575-BD88-A08300C1DE41
DA08E433-111D-4C25-9A23-A08300C1DE46    2       735604E4-25FD-4575-BD88-A08300C1DE41
3C0CEED7-0F3A-47C3-90E8-A08300C1DE4A    3       735604E4-25FD-4575-BD88-A08300C1DE41

最大バージョンのみを表示する SQL を取得するにはどうすればよいですか?

ID                                   Version    IdRoot
ED482E87-D36C-4E50-A6E7-A08300C1DE3C    2       887063C3-E1E5-4E76-9EE6-A08300C1DE2E
3C0CEED7-0F3A-47C3-90E8-A08300C1DE4A    3       735604E4-25FD-4575-BD88-A08300C1DE41

私はこのSQLを実行しました: SELECT ID, MAX([version]) as maxversione, idroot FROM Table GROUP BY IdRoot

ただし、SQL MANAGEMENT はエラーを返します: ID は集計またはグループ化に挿入する必要があります。

Group By に ID を挿入すると、SQL は正しいデータを返しません。

私はSQL 2008を持っています。

ありがとう。

4

3 に答える 3

0

Mahmoud Gamal answerのようにウィンドウ関数でこれを行うことは可能ですが、他の解決策があります:

select
    t.*
from (select distinct IdRoot from Table1) as r
    outer apply (
        select top 1 t.*
        from Table1 as t
        where t.IdRoot = r.IdRoot
        order by [Version] desc
    ) as t

=> sql フィドルのデモ

またはこのようなもの:

select
    r.*
from Table1 as r
where
    exists (
        select *
        from Table1 as t
        where t.IdRoot = r.IdRoot
        having max([Version]) = r.[Version]
    )

=> sql フィドルのデモ

于 2013-09-03T09:33:19.630 に答える
0
 SELECT IDRoot, MAX(version) as maxversione,
 (Select ID From Table Where IdRoot = TB.IdRoot And Version = Max(TB.Version)) as ID
 FROM Table TB GROUP BY IdRoot

上記のクエリで行ったように、ID を個別に選択できます。

于 2013-09-03T10:18:58.300 に答える