4

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

ユーザーが閲覧を終了する最も一般的なページを表示するSQLクエリを実行したいと思います。

したがって、私の最初の考えは、私の(java)アプリで、テーブルから個別のhttp_session_id値を選択するクエリを実行し、次に個別のhttp_session_idごとに、「最新」のpage_hit_timestampを持つページを取得する別のクエリを実行できるということです。これらすべてのページの合計。(上記のサンプルデータの場合、info.htmlの場合は2カウント、faq.htmlの場合は1カウントになります。)

しかし、私が知りたいのはこれです:これらの2つのクエリを単一のSQLステートメントに結合する方法はありますか?それとも、そのためにストアドプロシージャルートをたどる必要がありますか?

joinの使用について見てきましたが、このシナリオに適用できるかどうかわかりません。

PS-アプリでGoogleAnalyticsのようなものを使用してこの情報を提供できることは知っていますが、a)これはモバイルWebアプリなので、既製の分析ツールには適していません。b)興味があります。これがSQLで実行できるかどうかを確認します。

4

4 に答える 4

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
于 2010-01-20T21:28:02.653 に答える
3
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)の組み合わせがテーブルで発生する回数のカウント
  • 組み合わせの最新(MAX)タイムスタンプ
于 2010-01-20T21:28:54.393 に答える
0

2つのクエリを提供していただけますか。簡単にJOINに変換できます。また、必要に応じてサブクエリに変換することもできます。

于 2010-01-20T21:27:45.820 に答える
0

以下のクエリは、最後にアクセスされたページを一覧表示します。

からhttp_session_id、page_name、page_hit_timestampを選択します
(select row_number()over(partition by t.http_session_id order by t.page_hit_timestamp desc)rn、t。* from weblog t
)ここで、rn = 1;


カウントしたい場合は、以下のクエリが役立つ場合があります

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
)ここで、rn = 1
page_nameでグループ化;
于 2010-01-21T08:11:51.367 に答える