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

问题描述 投票:0回答:1

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

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

| 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,start_date,end_date提取的时间范围

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

预期的结果将是user_id,date,activity

1, 1/1/18, a1
1, 2/12/18, a2
2, 2/4/18, b2
2, 3/24/18, b3
mysql
1个回答
0
投票

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

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

如果您的日期存储为字符串(由Raymond评论,似乎就是这种情况),您需要使用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') 
© www.soinside.com 2019 - 2024. All rights reserved.