MySQL では機能するが Oracle では機能しないクエリがあり、変換しようとしています。これは私のテーブルです:
unique_row_id http_session_id page_name page_hit_timestamp
----------------------------------------------------------------
0 123456789 index.html 2010-01-20 15:00:00
1 123456789 info.html 2010-01-20 15:00:05
2 123456789 faq.html 2010-01-20 15:00:15
3 987654321 index.html 2010-01-20 16:00:00
4 987654321 faq.html 2010-01-20 16:00:05
5 987654321 info.html 2010-01-20 16:00:15
6 111111111 index.html 2010-01-20 16:01:00
7 111111111 faq.html 2010-01-20 16:01:05
8 111111111 info.html 2010-01-20 16:01:15
SQLは
select http_session_id, unique_row_id, page_name, page_hit_timestamp
from page_hits
group by http_session_id;
MySQL では、これは 3 つの行を返します (一意の http_session_id ごとに 1 つ)。
Oracle では、「ORA-00979: GROUP BY 式ではありません」というエラーが表示されます。私もdistinctで遊んでみましたが、うまくいきません。
明確にするために、一意の http_session_id ごとに 1 つの行を含む ResultSet が必要です。unique_row_id は最大値 (たとえば、http_session_id==123456789 の場合は 2) であることが望ましいですが、これは重要ではありません。
私はこれを複数の個別のSQLステートメントに分割する寸前です(1つは「個別のhttp_session_idを選択」、もう1つはこれらすべてを繰り返し処理してmax(unique_row_id)を選択します。ポインターは喜んで受け取ります-避けたいですこれ!
Rgds、ケビン。