пытаясь выйти из рядов с датами ближе 5 минут друг к другу - PullRequest
1 голос
/ 10 марта 2011

Мне нужно сосчитать все строки в таблице MySQL, опуская записи с одинаковыми столбцами agent и msisnd и датами ближе 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, поскольку строки с идентификаторами 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 * будет началом в этот момент.

Заранее спасибо.

1 Ответ

0 голосов
/ 10 марта 2011

Вы на правильном пути с самостоятельным объединением, но я думаю, что вы можете присоединиться не к тому столбцу.И я думаю, что вам также понадобится 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...