我想根据用户自己的时间范围选择行。
假设我有两个表。第一个是关于用户活动日志数据的。
| 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
答案 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')