

■やりたいこと
あるコンテンツ(例えば占い)の初回閲覧者が次回以降の更新される際に何人見ているのか調べたいです。
■やってみたこと
二つのテーブルがあります
(1)閲覧テーブルは
閲覧日毎のパーティションで区切られ、
ユーザーID(文字),コンテンツID(文字),partition(文字)で
コンテンツIDはジャンル(占いuranai、お出かけodekakeなど)の後ろに数字4桁がついています)
(2)コンテンツの更新テーブル
更新日(文字) コンテンツ(文字) コンテンツID(文字)のようなもので
20180416 お出かけ5月 odekake01234
20180516 お出かけ6月 odekake00342
20180618 お出かけ7月 odekake00358
20180420 占い5月 uranai00213
20180518 占い6月 uranai00433
20180620 占い7月 uranai00243
それに対して私は
------------------
select
count( a.ユーザーID)
from
(
--初回閲覧者
select
distinct ユーザーID
FROM
コンテンツの閲覧履歴のテーブル
where
partition between '2018-04-16'and'2018-05-15'and
content_id like '占い%’
)a
join
(
--次回閲覧者
select
distinct ユーザーID
FROM
コンテンツの閲覧履歴のテーブル
where
partition between '2018-05-16'and'2018-06-17'and
content_id like '占い%’
)b
on a.ユーザーID=b.ユーザーID
--------------
このようなクエリを回しています。
次回の掲載期間は2018-05-16から2018-06-17ですが
その次は2018-06-18から2018-07-16のように
少しずれます。
次回のところの日付を変更してその都度クエリを回しています。
これを2年分、コンテンツ毎(占いのほかにお出かけ、グルメなど…)に回すのですが
もっと効率の良いやり方があれば教えてほしいです。
(例えば1個のクエリが終わったら次のクエリを回せるとか、コンテンツ毎にまとめて出力するなど)
よろしくお願いいたします。
No.1ベストアンサー
- 回答日時:
まず確認です。
○ 閲覧テーブル の 「コンテンツID」と 更新テーブルの「コンテンツID」って違うものなのですか?
普通は同じものにするのですが。
「がんばってこれをなんとかしよう」
とするのではなく、
「ここが違ってたら楽なのになぁ」
を考えるとよいのでは。
見ると
・コンテンツIDからコンテンツグループに分けるところ
・注目するコンテンツと、「その次」のコンテンツを、partition(日付) から betweenを使って分けているところ
が面倒になっている原因で、これがなんとかなれば楽になりそうだ、ということがわかります。
ならば
・グループが最初からわかるようにする。
・日付ではなく「順番」の整数を使えば「次」は「元+1」で求められる
とすれば、かなり楽になりますし、
・全コンテンツの集計が1度でできる
という利点もあります。
例えば。
・コンテンツの更新テーブルを変えます。
あるいは、追加列を別テーブルにしてJOINします。
更新日(文字) コンテンツ(文字) コンテンツID(文字) コンテンツグループ コンテンツ順番 閲覧テーブル_コンテンツID
20180416 お出かけ5月 odekake01234 odekake 1 お出かけodekake01234
20180516 お出かけ6月 odekake00342 odekake 2 お出かけodekake00342
20180618 お出かけ7月 odekake00358 odekake 3 お出かけodekake00358
20180420 占い5月 uranai00213 uranai 1 占いuranai00213
20180518 占い6月 uranai00433 uranai 2 占いuranai00433
20180620 占い7月 uranai00243 uranai 3 占いuranai00243
・これを閲覧テーブルを適切のJOINすれば、次のようなテーブルになります
ユーザーID コンテンツグループ コンテンツ順番
A001 uranai 1
A001 uranai 2
・これを 2 つJOINして
ON A.ユーザーID=B.ユーザーID AND A.コンテンツグループ=B.コンテンツグループ
AND A.コンテンツ順番 = B.コンテンツ順番-1
とでもやれば、全てのコンテンツのうち、「次も閲覧している」リストができます。
※ ざっとした流れだけを書いています。
正確なのは、学習もかねて御自身でやってみてください。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Access(アクセス) アクセス where句を使用して複数条件抽出をするには 2 2022/08/29 13:24
- YouTube YouTubeのコンテンツIDについて教えてください。 1 2022/05/18 08:13
- MySQL 書籍の内容はまともでしょうか? 1 2023/01/22 03:07
- SQL Server SQLのクエリの書き方 1 2022/03/29 23:06
- Oracle SQL update方法 2 2022/06/22 14:07
- Access(アクセス) アクセス 有効なフィールド名、または式として認識できませんのエラー 3 2022/08/19 11:53
- Access(アクセス) アクセス 削除するレコードを含んだテーブルを指定してくださいのエラー対処方法 1 2022/11/24 15:01
- MySQL PhpMyAdminで作成して実行せよ。 東京23区を、皇居を中心とした4つのエリア(南東, 南西, 1 2023/06/11 11:58
- SQL Server [SQLServer] テーブル名からカラム名を取得する 1 2022/08/23 21:20
- MySQL 共通点はあります。何が違うのでしょうか? 1 2023/01/27 05:22
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
会社の飲み会の幹事になり、座...
-
テーブルリンク リンク元を知...
-
「テーブルに座って……」という...
-
外部キーだけのテーブル(主キ...
-
PostgreSQL7.0とMsAccess2000の...
-
レポート テーブルデータ表示
-
ボックスシート
-
リレーションシップが出来ません。
-
SHOW TABLE STATUS;とは?
-
Delphi SQL
-
ACCESS2000を使って複数のテー...
-
db2 index テーブルについて
-
面接のときテーブルが正面に。...
-
複雑なSQL文について
-
Access SQL パラメータクエリ(...
-
リレーションシップと外部キー...
-
SQLでテーブル名称を変えた場合...
-
L2SWはARPテーブルを持っている?
-
下記、問題に対しての解答が以...
-
SQL 外部結合
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
会社の飲み会の幹事になり、座...
-
「テーブルに座って……」という...
-
下記、問題に対しての解答が以...
-
L2SWはARPテーブルを持っている?
-
外部キーだけのテーブル(主キ...
-
飲み会で、座敷orテーブルどち...
-
テーブルリンク リンク元を知...
-
アクセスのリンクテーブル一覧...
-
男性と2人で飲食店に行きテーブ...
-
複雑なSQL文について
-
お金持ちのテーブル
-
オーダーの覚え方について
-
面接のときテーブルが正面に。...
-
【エクセル】データテーブルの...
-
【MySQL】1対1でテーブルをあ...
-
UTF8のテーブルをODBCドライバ...
-
テーブル(構造)のコピー
-
論理名とコメント構文(?)について
-
取数計算
-
まるいテーブル 円い 丸い 漢字...
おすすめ情報