我有一个包含以下数据的表:
ID Event_time Event_type
0 2016-05-11 17:26:03.0 1
0 2017-06-13 19:29:03.0 2
0 2017-06-13 13:56:05.0 3
0 2016-05-13 17:20:37.0 1
1 2016-09-20 16:20:03.0 0
1 2016-11-11 20:12:03.0 2
2 2016-11-15 17:26:03.0 1
2 2016-12-02 15:06:00.0 2
2 2016-12-02 15:00:03.0 0
每个 ID 都有 Event_type = 2
。现在,我只想分别为每个 ID
选择比 Event_type = 2
日期早 1 周或更短的数据。
我尝试了这个查询:
SELECT*FROM my_table WHERE EVENT_TIME IN (SELECT DATE_SUB(EVENT_TIME, INTERVAL 7 DAY) FROM my_table where EVENT_TYPE='2')
但它没有给我想要的输出,应该是:
ID Event_time Event_type
0 2017-06-13 19:29:03.0 2
0 2017-06-13 13:56:05.0 3
1 2016-11-11 20:12:03.0 2
2 2016-12-02 15:06:00.0 2
2 2016-12-02 15:00:03.0 0
我认为 DATE_SUB
函数无法正常工作,但我不知道如何修复它。
编辑: Event_type = 2 的日期应该出现在输出中。
最佳答案
您提到“分别针对每个 ID”,但您没有在查询中检查这一点。
尝试这样:
SELECT *
FROM my_table WHERE EVENT_TIME > (
SELECT DATE_SUB(MAX(EVENT_TIME), INTERVAL 7 DAY)
FROM my_table mt /*note that I used a different alias here for the table...*/
WHERE EVENT_TYPE='2'
AND mt.ID = my_table.ID /*...so that I can distinguish between the ID in the subquery and the outer query*/
)
关于MySQL:从特定的 event_time 中选择事件时间早于 1 周的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45792029/