SQL - Присоединяйтесь к двум отдельным запросам SQL
Вопрос
У меня есть таблица, в которой хранится страница в веб -приложении, хранение
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 -запрос, который покажет мне самую распространенную страницу, на которую заканчиваются пользователи.
Поэтому я думаю, что в моем приложении (Java) я могу запустить запрос, который выберет различные значения http_session_id из таблицы, а затем для каждого отдельного http_session_id запустите другой запрос, который получает страницу с «последним» page_hit_timestamp, и суммируйте общую сумму для всех этих страниц. (Для примера данных выше у меня было бы количество 2 для информации. HTML и подсчет 1 для faq.html.)
Но то, что я хотел бы знать, так это: есть ли способ объединить эти два запроса в одно заявление SQL - или мне придется идти по маршруту сохраненной процедуры для этого?
Я посмотрел на использование Join, но я не могу понять, применимо ли оно в этом сценарии.
PS - я знаю, что я мог бы использовать такие, как Google Analytics в моем приложении, чтобы предоставить эту информацию для меня, но а) это мобильное веб -приложение, так что не очень хорошо для инструментов аналитики с полки, и б) мне просто любопытно Знайте, можно ли это сделать в SQL.
Решение
Это должно делать то, что вы хотите:
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
Другие советы
SELECT http_session_id, page_name, COUNT(page_name), MAX(page_hit_timestamp)
FROM table
GROUP BY http_session_id, page_name
Это вернет строку для каждой комбинации http_session_id и page_name, и эта строка будет содержать:
- http_session_id
- page_name
- Счет, сколько раз в таблице (http_session_id+page_name) происходит в таблице.
- последняя (максимальная) временная метка комбинации
Можете ли вы предоставить свои два запроса, я мог бы легко превратить их в соединение для вас, или, возможно, подраздел в зависимости от ваших потребностей.
В запросе ниже перечислены последние доступные страницы,
select http_session_id,page_name,page_hit_timestamp from (select row_number() over( partition by t.http_session_id order by t.page_hit_timestamp desc) rn,t.* from weblog t ) where rn=1;
Если вы хотите считать, то запрос ниже может помочь
select page_name,count(*) from (select row_number() over( partition by t.http_session_id order by t.page_hit_timestamp desc) rn,t.* from weblog t ) where rn=1 group by page_name;