このテーブルの名前が extable
|--A--|--B--|--C--|
|-----|-----|-----|
|01:21| 4-1 | no |
|01:28| 4-2 | yes |
|05:53| 3-5 | yes |
|03:34| 9-1 | yes |
|18:48| 9-1 | yes |
|13:01| 9-1 | yes |
|00:17| 7-4 | yes |
|14:24| 4-1 | no |
|18:19| 4-1 | yes |
|08:02| 7-4 | yes |
|15:21| 7-4 | no |
|21:23| 3-5 | no |
|02:57| 4-2 | no |
|21:03| 4-2 | yes |
|11:31| 4-1 | no |
次のように、時間、列A、列B、列Cの順に並べ替えるにはどうすればよいですか。
|--A--|--B--|--C--|
|-----|-----|-----|
|05:53| 3-5 | yes |
|21:23| 3-5 | no |
|18:19| 4-1 | yes |
|14:24| 4-1 | no |
|21:03| 4-2 | yes |
|02:57| 4-2 | no |
|08:02| 7-4 | yes |
|15:21| 7-4 | no |
|18:48| 9-1 | yes |
|21:56| 9-1 | no |
列Bの最低から最高で並べ替えることができるようにしたい。次に、列Bの各エントリyes
のno
オプションの前に配置したい。列Aのタイムスタンプは、yes
およびno
エントリの最新のものになります。上記の例よりもはるかに効果が低いと説明しているような気がします。
私はこれができることを知っています:ORDER BY column B, column C, column A;
、しかしこれは元のテーブルからすべてのエントリを引き出します。意味がある場合は、列Aのタイムスタンプで最新のものだけが必要です。9-1
元のテーブルに4つのエントリがyes
ありno
ますが、最新のオプションのみがプルされていることに注意してください。
ありがとう
2つの要件があります:1)リストされているように結果を並べ替えます2)各列「B」の最新のyes / no値のみを保持します
ORDER BY
句は非常に簡単です。唯一の変更点はC
、句のフィールドの後に「DESC」を付けyes
て、最初に表示されるようにすることです。
2番目の要件は、ウィンドウ関数を使用して結果セットの行をB
とC
でA
グループ化し、各グループの結果に番号を付けて並べ替えることで解決できます。次に、ランク付けされたものを保持します1
次のようなものが機能するはずです。
SELECT A,B,C
FROM
(
SELECT
A,
B,
C,
ROW_NUMBER() OVER (PARTITION BY B, C ORDER BY A DESC) as keeprank
FROM <table>
) t1
WHERE keeprank = 1
ORDER BY A, B, C DESC
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加