MySQL:从特定的 event_time 中选择事件时间早于 1 周的行

标签 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。现在,我只想分别为每个 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/

相关文章:

php - 合并来自两个 PDO 查询的结果

c# - 标签文本每秒刷新一次

datetime - 在 flutter 中将 String 转换为 DateTime

mysql 选择问题

mysql - 一个简单的mySQL查询+统计分析

php - MySQL 查询从 PHP 代码返回 null,但在终端中工作正常

php - 复选框的只读属性

mysql - 从 mysql 中的表创建动态创建的列

vb.net - 获取过去 10 个星期一的列表

c - Linux 中的 Select 循环——如何让它变得更好?