次の表を検討してくださいsome_table
。
+--------+----------+---------------------+-------+
| id | other_id | date_value | value |
+--------+----------+---------------------+-------+
| 1 | 1 | 2011-04-20 21:03:05 | 104 |
| 2 | 1 | 2011-04-20 21:03:04 | 229 |
| 3 | 3 | 2011-04-20 21:03:03 | 130 |
| 4 | 1 | 2011-04-20 21:02:09 | 97 |
| 5 | 2 | 2011-04-20 21:02:08 | 65 |
| 6 | 3 | 2011-04-20 21:02:07 | 101 |
| ... | ... | ... | ... |
+--------+----------+---------------------+-------+
other_id
を選択してグループ化し、一意の のみを取得したいと考えていますother_id
。このクエリは機能します (クレジット @MichaelPakhantsov):
select id, other_id, date_value, value from
(
SELECT id, other_id, date_value, value,
ROW_NUMBER() OVER (partition by other_id order BY Date_Value desc) r
FROM some_table
)
where r = 1
同じ結果を得るにはどうすればよいですかother_id
。望ましい結果は次のようになります。
+--------+----------+---------------------+-------+-------+
| id | other_id | date_value | value | count |
+--------+----------+---------------------+-------+-------+
| 1 | 1 | 2011-04-20 21:03:05 | 104 | 3 |
| 5 | 2 | 2011-04-20 21:02:08 | 65 | 2 |
| 3 | 3 | 2011-04-20 21:03:03 | 130 | 2 |
+--------+----------+---------------------+-------+-------+
COUNT(other_id)
内部選択と外部選択の両方で使用しようとしましたが、次のエラーが発生します。
ORA-00937: 単一グループのグループ関数ではありません
注:この質問(表と回答の例)に似ていますが、その質問は折りたたまれた行の数を示しません。