mysql - 试图从日期相距小于 5 分钟的行中消除

标签 mysql group-by

我需要计算 MySQL 表中的所有行,省略具有相同 agentmsisnd 列且日期彼此相距小于 5 分钟的记录。 例如,

id     type    agent              msisdn     date
2706   jurnal  EC_Catalin.Silvan  745844472  2011-02-18 18:31:54
63535  item    EC_Adelina.Gartan  766699747  2011-02-22 18:42:15
56513  item    EC_Adelina.Gartan  766733667  2011-02-24 17:13:31
56372  item    EC_Adelina.Gartan  766733667  2011-02-24 17:12:01

查询应返回 COUNT = 3,因为 ID 为 56513 和 56372 的行彼此有接近的日期。

到目前为止,我得到了这个查询,但它不起作用

SELECT `calls_count_pre`.*
    FROM `calls_count_pre`
    LEFT JOIN `calls_count_pre` AS `temp` ON (`calls_count_pre`.`id` = `temp`.`id`)
WHERE
    (MINUTE(TIMEDIFF(`calls_count_pre`.`date`, `temp`.`date`)) <= 5 AND HOUR(TIMEDIFF(`calls_count_pre`.`date`, `temp`.`date`)) = 0)
    AND `calls_count_pre`.`msisdn` = `temp`.`msisdn`
    AND `calls_count_pre`.`agent` = `temp`.`agent`
ORDER BY `calls_count_pre`.`agent`, `calls_count_pre`.`msisdn`, `calls_count_pre`.`date` DESC

它只是返回所有记录。我知道我没有选择 COUNT,但此时即使是 SELECT * 也是一个开始。

提前致谢。

最佳答案

您通过自联接走在正确的轨道上,但我认为您可能加入了错误的列。而且我认为您还需要 GROUP BY

尝试更像这样的东西:

SELECT calls_count_pre.*
   FROM calls_count_pre
   LEFT JOIN calls_count_pre AS temp
        ON calls_count_pre.msisdn = temp.msisdm AND calls_count_pre.agent = temp.agent
        AND temp.date > calls_count_pre.date
        AND DATESUB(temp.date, INTERVAL 5 MINUTE) < calls_count_pre.date
GROUP BY calls_count_pre.agent

关于mysql - 试图从日期相距小于 5 分钟的行中消除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5253739/

相关文章:

sql - GROUP BY 但从其他列中获取所有值

mysql - SQL 查询需要修改 — 同一主题不能多次显示

php - MYSQL 使用准备好的语句替换列值,字符串版本

mysql - 作为一个查询从多个表中删除行

PHP/MySQL 脚本不会让用户在很多时间内多次访问

Python 与包含转义字符的字符串的绑定(bind)

Mysql如何根据优先级进行选择

mysql - SQL,按 MAX 查找组的计数

sql - 带SUM的GROUP BY,不会删除空(空)值

java - 使用 hibernate 创建 MySQL 表的问题