SQL - 加入两个单独的SQL查询

Kev*_*vin 4 sql oracle join oracle9i

我有一个表,用于存储Web应用程序中的页面命中,存储

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查询,它将向我显示用户最终浏览的最常见页面.

所以我最初的想法是,在我的(java)应用程序中,我可以运行一个查询,从表中选择不同的http_session_id值,然后对于每个不同的http_session_id,运行另一个获取带有'latest'page_hit_timestamp的页面的查询,并总计所有这些页面的总和.(对于上面的示例数据,我对info.html计数为2,对faq.html计数为1.)

但是,我想知道的是:有没有办法将这两个查询组合成一个单独的sql语句 - 或者我是否必须将存储过程路由下去?

我已经看过使用join了,但我无法弄清楚它是否适用于这种情况.

PS - 我知道我可以使用谷歌分析的喜欢在我的应用程序提供给我这个信息,但一),这是一个移动网络应用程序,所以不太适合现成的分析工具,和b)我只是好奇,知道这是否可以在SQL中完成.

Red*_*ter 5

这应该做你想要的:

select 1.page_name, count(*) as ExitPageCount
from WebLog l
inner join (
    select http_session_id, max(page_hit_timestamp)
    from WebLog
    group by session
) lm on l.http_session_id = lm.http_session_id and l.page_hit_timestamp = lm.page_hit_timestamp
group by 1.page_name
Run Code Online (Sandbox Code Playgroud)