SQL - Присоединяйтесь к двум отдельным запросам SQL

StackOverflow https://stackoverflow.com/questions/2105079

  •  21-09-2019
  •  | 
  •  

Вопрос

У меня есть таблица, в которой хранится страница в веб -приложении, хранение

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;
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top