visit
mysql テーブル:
+---------+-------------+------------+--------+---------------------+
| visitId | visitSiteId | homeSiteId | userId | time |
+---------+-------------+------------+--------+---------------------+
| 1 | 1 | 1 | 1001 | 2013-09-01 11:50:12 |
| 2 | 1 | 1 | 1001 | 2013-09-03 12:50:12 |
| 3 | 2 | 1 | 1001 | 2013-09-04 13:50:12 |
| 4 | 2 | 1 | 1001 | 2013-09-07 11:00:00 |
| 5 | 2 | 1 | 1001 | 2013-09-09 12:32:12 |
| 6 | 2 | 1 | 1001 | 2013-09-13 15:48:12 |
| 7 | 2 | 2 | 1002 | 2013-09-01 11:00:12 |
| 8 | 2 | 2 | 1002 | 2013-09-02 12:50:12 |
| 9 | 2 | 2 | 1002 | 2013-09-05 13:50:12 |
| 10 | 1 | 2 | 1002 | 2013-09-06 11:50:12 |
| 11 | 1 | 2 | 1002 | 2013-09-07 12:50:12 |
| 12 | 2 | 2 | 1002 | 2013-09-15 13:50:12 |
+---------+-------------+------------+--------+---------------------+
訪問日時、訪問したサイト、およびユーザーのホーム サイトを記録します。
上記のデータから3つのレポートを出力する方法を見つけたいです。
- Non Home Site Visit Count >= HomeSite Visit Count を持つすべてのユーザーを返します。任意の日付
- 非ホーム サイト訪問回数 >= a 最小入力整数 (例: 非ホーム カウント >= 10) を持つすべてのユーザーを返します。
- 日付範囲の 1 と 2 の両方、つまり Time >= '2013-09-01 11:50:12' AND Time <= '2013-09-13 15:48:12'
私はMySQLに非常に慣れていないため、サブクエリ構文に苦労しているので、助けていただければ幸いです。以下のクエリは、自宅訪問と非自宅訪問の数を返しますが、サブクエリを組み合わせた結果を理解することはできません
SELECT COUNT(v.user_id), v.user_id FROM visit v WHERE v.Site <> v.HomeSite GROUP BY v.user_id;
SELECT COUNT(v.user_id), v.user_id FROM visit v WHERE v.Site = v.HomeSite GROUP BY v.user_id;
SELECT COUNT(v.user_id), v.user_id FROM visit v WHERE v.Site <> v.HomeSite AND v.Time >= '2013-09-01 11:50:12' AND v.Time <= '2013-09-13 15:48:12' GROUP BY v.user_id;
SELECT COUNT(v.user_id), v.user_id FROM visit v WHERE v.Site = v.HomeSite AND v.Time >= '2013-09-01 11:50:12' AND v.Time <= '2013-09-13 15:48:12' GROUP BY v.user_id;
以下は、テストを支援する MySQL の Create Table と INSERT Data です。
CREATE TABLE `dbName`.`visit`(`visitId` INT(11) NOT NULL AUTO_INCREMENT, `visitSiteId` INT(11), `homeSiteId` INT(11), `userId` INT(11), `time` DATETIME, PRIMARY KEY (`visitId`));
INSERT INTO `dbName`.`visit`(`visitSiteId`,`homeSiteId`,`userId`,`time`) VALUES
(1,1,1001,'2013-09-01 11:50:12'),
(1,1,1001,'2013-09-03 12:50:12'),
(2,1,1001,'2013-09-04 13:50:12'),
(2,1,1001,'2013-09-07 11:00:00'),
(2,1,1001,'2013-09-09 12:32:12'),
(2,1,1001,'2013-09-13 15:48:12'),
(2,1,1002,'2013-09-01 11:00:12'),
(2,1,1002,'2013-09-02 12:50:12'),
(2,1,1002,'2013-09-05 13:50:12'),
(1,1,1002,'2013-09-06 11:50:12'),
(1,1,1002,'2013-09-07 12:50:12'),
(2,1,1002,'2013-09-15 13:50:12');