我有一个表“InitialVisit”,它记录了用户为特定目的访问的日期,这些访问可以重复,但可以通过访问日期和目的来区分,我有另一个表“SubsequentVisit”后有后续访问初次访问,数据仅提供一年。 “InitialVisit”表是历史性的,有五年的数据,但不是太大,但“SubsequentVisit”非常大,超过50M的记录。
我想找到用户在一个月内从第二个表离开的日期之后的后续访问。数据是原始收集的,因此不涉及主键或外键
数据摘录是 “InitialVisit”
UserID DateVisit `DateLeft ` `Purpose`
1 `01-01-2016` 02-01-2017 F20
2 23-11-2016 12-12-2016 R43
1 03-03-2016 04-04-2016 F27
3 06-07-2014 09-07-2014 K22
4 09-09-2016 10-09-2016 Y77
5 04-07-2016 02-08-2016 F22
“SubsequentVisit”
UserID SubsequentVisit 1 03-01-2017 1 20-04-2016 2 27-12-2016
我真的很感激一个简单快速的查询,我可以得到结果
UserID
3
4
5
有更快的方法来实现这个目标吗?
答案 0 :(得分:0)
由于表格没有任何键/索引,您可以尝试在index
列上添加UserID
,例如:
ALTER TABLE InitialVisit ADD INDEX (UserID);
ALTER TABLE SubsequentVisit ADD INDEX (UserID);
要让所有没有后续访问的用户,您可以使用EXISTS
,例如:
SELECT UserID
FROM InitialVisit iv
WHERE
iv.DateLeft BETWEEN "2017-01-01" AND DATE_ADD("2017-01-01", INTERVAL 6 MONTHS)
AND NOT EXISTS (
SELECT 1 FROM SubsequentVisit WHERE UserID = iv.UserID
);