MySQL:从特定event_time

时间:2017-08-21 08:03:17

标签: mysql datetime select

我有一个包含以下数据的表:

    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的日期应该在输出中。

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'