选择具有用户自己时间范围的行

时间:2019-01-16 18:06:14

标签: mysql

我想根据用户自己的时间范围选择行。

假设我有两个表。第一个是关于用户活动日志数据的。

| user_id    | date        | activity     |
|:-----------|------------:|:------------:|
| 1          |      1/1/18 |    a1        |
| 1          |     2/12/18 |    a2        |
| 1          |     3/21/18 |    a3        |
| 2          |     1/13/18 |    b1        |
| 2          |      2/4/18 |    b2        |
| 2          |     3/24/18 |    b3        |

第二个表是我要为每个用户提取的时间范围 user_id,开始日期,结束日期

1, 1/1/18, 3/1/18
2, 2/1/18, 4/1/18

预期结果将是 user_id,日期,活动

1, 1/1/18, a1
1, 2/12/18, a2
2, 2/4/18, b2
2, 3/24/18, b3

1 个答案:

答案 0 :(得分:0)

看起来您需要在两个表之间进行简单的JOIN,且活动日期为BETWEEN条件:

SELECT ua.*
FROM user_activity ua 
INNER JOIN time_range tr 
    ON ua.date BETWEEN tr.start_date AND tr.end_date

如果日期存储为字符串(如雷蒙德所说,似乎是这种情况),则需要使用STR_TO_DATE进行转换:

ON STR_TO_DATE(ua.date, '%c/%e/%y') BETWEEN 
    STR_TO_DATE(tr.start_date, '%c/%e/%y')
    AND STR_TO_DATE(tr.end_date, '%c/%e/%y')