从两个非相关表中获取数据,其中访问日期应在一段时间后进行

时间:2017-04-14 23:55:00

标签: mysql

我有一个表“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

有更快的方法来实现这个目标吗?

1 个答案:

答案 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
);