2016-06-16 2 views
-4

Мне нужно создать sql-запрос. Итак, я создаю скрипт sql для вас с данными link.Как создать SQL-запрос?

CREATE TABLE `passages_table` (
`ID` INT(11) NOT NULL AUTO_INCREMENT, 
`INSIDE` TINYINT(4) NOT NULL DEFAULT '0', 
`TAG` CHAR(50) NOT NULL DEFAULT '0', 
`DATE` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, 
PRIMARY KEY (`ID`) 

)

мне нужно сгруппировать записи по TAG, где каждый тег должен иметь сумму разницы между датами, которые имеют ВНУТРИ == 1 и даты, которые имеют ВНУТРИ == 0

результат должен быть (пример) TAG | INTERVAL (минуты)
"---" | 40
"---" | 1450

enter image description here

+0

и что вы пытались –

+0

я не понимаю, как получить сумму разницы –

+0

MySQL имеет функцию для вычисления разницы в датах http://www.w3schools.com/sql/ func_datediff_mysql.asp –

ответ

0

вот моя попытка не совсем уверен, как вы бы соединить их так, я добавляю отношения здесь искать наименьший идентификатор, который больше с таким же тэгом и внутри = 0

Чтобы получить пар он соединяет T1 с T2, где условия можно увидеть в запросе ниже.

SELECT TAG,SUM(secs_diff)/60 as `INTERVAL` 
FROM 
    (SELECT T1.INSIDE,T1.TAG,T1.DATE, 
     T2.INSIDE INSIDE2,T2.TAG TAG2,T2.DATE DATE2, 
     TIME_TO_SEC(T2.DATE) - TIME_TO_SEC(T1.DATE) as secs_diff   
    FROM passages_table T1 
    INNER JOIN passages_table T2 ON 
    T1.TAG = T2.TAG AND T1.INSIDE = 1 AND T2.INSIDE = 0 
    AND T2.ID > T1.ID 
    WHERE NOT EXISTS (SELECT 1 FROM passages_table T3 
        WHERE T3.ID > T1.ID AND T3.ID < T2.ID AND T3.TAG = T1.TAG) 
)T 
GROUP BY TAG 

http://sqlfiddle.com/#!9/b82e09/10

Смежные вопросы