我有一个包含以下数据的表:
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
。现在,我想分别为每个Event_type = 2
选择仅比ID
的日期早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
功能一起使用,但我不知道如何修复它。
EDITED: Event_type = 2的日期应该在输出中。
答案 0 :(得分:1)
您为每个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*/
)
答案 1 :(得分:0)
IN
子句将使得日期必须与给定的选择完全一致。
尝试:
SELECT*FROM my_table WHERE EVENT_TIME < DATE_SUB(EVENT_TIME, INTERVAL 7 DAY) AND EVENT_TYPE='2'