2016-02-22 3 views
0

У меня есть очень простая таблица, как: box, some_data, unix_timestampВыберите пробелы в записях на основе метки времени в MySQL

В идеале, каждая коробка будет иметь новую метку времени один раз в час. Как создать ежедневный отчет для пропущенных записей, как я могу выбрать пробелы в записях, где ящик пропустил час или два? Нужно ли мне выбирать все данные за день и медленно анализировать его, или есть более быстрый способ сделать это в запросе MySQL?

например.

SELECT timestamp WHERE [[another timestamp doesn't appear for 65 minutes]]

Так что мои данные отчета в основном ...

Пропущенные записи:

Box 2: 2:01 am. , , 4:01 am (запись в 3:01 отсутствует)

Box 8: 6:05 am. , , 10:05 am (7:05, 8:05 и 9:05 отсутствуют)

Box 28: 3:15 am. , , (все еще отключен!)

Это может иметь много ящиков, поэтому я хочу сделать это наиболее эффективным способом. Если кто-то подумает о том, как это сделать, не выбирая данные всего дня и не разбираясь в этом, я бы хотел его услышать.

Спасибо !!!

ответ

0

Используя только один запрос, я могу только подумать об этом варианте, который НЕ даст вам то, что вам нужно, поскольку оно работает только в течение не более одного часа, но не работает, например. две записи пропускаются или так:

SELECT DATE_ADD(timestamp, INTERVAL 1 HOUR) FROM table t1 
WHERE NOT EXISTS (
    SELECT * FROM t2 WHERE t2.timestamp = DATE_ADD(t1.time, INTERVAL 1 HOUR) 
) 

Поэтому я рекомендовал бы вам осуществить это на уровне приложений, используя ваш любимый язык программирования.

Это какой-то псевдо-код, как я хотел бы сделать это:

result := [result set coming from your database] 
// assuming that result is returned sorted by timestamp (i.e. ORDER BY timestamp) 

i = 0 
for j in 0..23 
    elem := [ith elem from result] 
    if hour(elem) <= j 
     i++ 
    else 
     add_to_result(j) 
Смежные вопросы