У меня есть запрос, который работает на MySQL, но не работает на Oracle, и я пытаюсь преобразовать. Это мой стол:«group by» работает на 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).
В Oracle я получаю сообщение «ORA-00979: не выражение GROUP BY». Я тоже пробовал играть с отличным, но я не могу заставить его работать.
Просто, чтобы быть ясным - мне нужен ResultSet, содержащий одну строку на уникальный http_session_id. Предпочтительно, чтобы unique_row_id был максимальным (например, 2 для http_session_id == 123456789), но это не имеет значения.
Я нахожусь на грани разбивки на несколько отдельных операторов sql (один «выберите отдельный http_session_id», а другой - итерацию по всем этим и выберите max (unique_row_id). Любые указатели будут с благодарностью приняты - I хотел бы избежать этого!
Rgds, Кевин.
Hi - да, это делает трюк. В полном объеме: выберите http_session_id, max (unique_row_id), max (page_name), max (page_hit_timestamp) из группы page_hits по http_session_id; – Kevin
И чтобы ответить на ваш вопрос о том, что делает MySQL: - Кажется, он возвращает столбцы из строки, связанной с первым сопоставлением http_session_id. Я не могу быть уверенным, потому что я не испытывал слишком много - он вполне мог вернуться последним в разных условиях. – Kevin
yep, я перейду к первому (page_name). – Kevin