2016-05-30 3 views
1

У меня есть следующая таблица:Как найти дубликаты между двумя переменными датами

id | whenCreated | callingNumber | 
---|--------------------------------| 
1 | 1-1-2016 9:00 | 0612345678 | 
2 | 1-1-2016 9:10 | 0623456789 | 
3 | 1-1-2016 9:55 | 0612345678 | 
4 | 1-1-2016 10:15 | 0623456789 | 
5 | 1-1-2016 11:00 | 0623456789 | 
etc. 

Datatypes: 
id = int (AI) 
whenCreated = datetime 
callingNumber = varchar 

Я хочу сделать анализ о том, сколько людей перезвонит в течение определенного периода после их предыдущего вызова (для примера, давайте скажем, 1 час). Для этого я хочу узнать, сколько раз кто-то звонил раньше в предыдущий период. В этом примере результат должен быть примерно таким:

id | whenCreated | callingNumber | prevCalls | 
---|--------------------------------|-----------| 
1 | 1-1-2016 9:00 | 0612345678 | 0   | < 0, because no previous calls 
2 | 1-1-2016 9:10 | 0623456789 | 0   | < 0, because no previous calls 
3 | 1-1-2016 9:55 | 0612345678 | 1   | < 1, because one call from this number in the last hour 
4 | 1-1-2016 10:15 | 0623456789 | 0   | < 0, there was one earlier call from this number, but it was more than an hour ago 
5 | 1-1-2016 11:00 | 0623456789 | 1   | < 1, because one call from this number in the last hour 
etc. 

Есть ли способ, которым я могу сделать это с помощью одного запроса в MySQL? Или мне нужно запустить скрипт для этого? (я знаю, как это сделать для каждой строки отдельно, я просто не могу найти способ сделать это с одним запросом).

+0

Какой тип столбца 'whenCreated'? – michaJlS

+0

@michaJlS Я добавил типы данных к моему вопросу, но чтобы ответить: это поле даты, поэтому я могу использовать date_sub и т. Д. – wjhulzebosch

ответ

1

Вы можете сделать это с помощью связанного подзапроса:

SELECT id, whenCreated, callingNumber, 
     (SELECT COUNT(*) 
     FROM mytable AS t2 
     WHERE t2.callingNumber = t1.callingNumber AND 
       t2.id < t1.id AND 
       TIMESTAMPDIFF(MINUTE, t2.whenCreated, t1.whenCreated) < 60) 
FROM mytable AS t1 

Запрос использует TIMESTAMPDIFF вычислить разницу в минутах между двумя whenCreated значениями.

Demo here

+0

Спасибо! Запрос работает, и это намного проще, чем запросы, над которыми я работал! – wjhulzebosch