Kev*_*vin 4 mysql oracle plsql group-by ora-00979
我有一个适用于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
Run Code Online (Sandbox Code Playgroud)
SQL是
select http_session_id, unique_row_id, page_name, page_hit_timestamp
from page_hits
group by http_session_id;
Run Code Online (Sandbox Code Playgroud)
在MySQL上,这将返回3行(每个唯一的http_session_id一行).
在Oracle上,我得到一个"ORA-00979:不是GROUP BY表达式"错误.我也尝试过与众不同,但我无法让它发挥作用.
为了清楚 - 我想要一个ResultSet,每个唯一的http_session_id包含一行.unique_row_id最好是最大值(例如http_session_id = 123456789为2),但这并不重要.
我快要把它分成多个单独的sql语句(一个"select distinct http_session_id",另一个迭代所有这些并选择max(unique_row_id).任何指针都会被感激地收到 - 我很想避免这个!
Rgds,凯文.
OMG*_*ies 10
您遇到ORA错误的原因是因为MySQL支持非标准GROUP BY子句,称其为"功能".它在这里记录.
标准SQL GROUP BY子句必须包含SELECT子句中指定的所有列,这些列不包含在GROUP BY子句中指定的聚合函数(LIKE COUNT,MAX/MIN等)中.
如果你想为每个http_session_id值设置一个唯一行 - 请查看使用ROW_NUMBER:
SELECT x.*
FROM (select http_session_id, unique_row_id, page_name, page_hit_timestamp,
ROW_NUMBER() OVER (PARTITION BY http_session_id
ORDER BY http_session_id) AS rank
FROM page_hits) x
WHERE x.rank = 1
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3363 次 |
| 最近记录: |