В таблице sca_ticket_thread хранятся даты изменения статуса. Я пытаюсь вычислить среднюю разницу во времени между двумя статусами. В столбце «created» хранится дата изменения статуса, а в столбце «тело» хранится изменение состояния.Вычисление средних разниц времени между строками в одной таблице
SELECT AVG(DateDiff((SELECT created FROM
(SELECT created
FROM sca_ticket_thread
WHERE body = 'AchangetoB'
OR body = 'BchangetoC'
GROUP BY ticket_id
HAVING count(*) > 1)
as subquery),
(SELECT created
FROM sca_ticket_thread
WHERE body = 'BchangetoC'
ORDER BY ticket_id)))
FROM sca_ticket_thread
Ошибка я получаю это: # 1242 - подзапрос возвращает более 1 ряд
I (концептуально, немного) понимают, что подзапрос не может возвращать более 1 строку. Я задумался о том, чтобы присоединиться к таблице как к возможному решению, но я не думаю, что это правильный путь вперед.
В конце концов, я хотел бы, чтобы произвести среднее изменение состояния от А до Б, В к С к D и т.д.
ID | STATUS | DATE
--------------------------
1 | Status A | 02/01/2015
1 | Status A | 02/02/2015
2 | Status B | 02/03/2015
Запуск двух подзапросов и посмотреть, что они возвращаются. Я не могу вспомнить никаких ограничений на количество строк, которые может вернуть подзапрос. Например: 'SELECT * FROM X WHERE x_id IN (SELECT x_id FROM X, где x_value LIKE 'foo%');' отлично работает, и подзапрос может возвращать несколько строк. Некоторые варианты для достижения того, что вы хотите включить: 'LIMIT',' GROUP' с 'MAX' /' MIN' и т. Д. – nevets1219
Первый оператор select возвращает 24 строки и второй 17. Это проблема? – Duke
Да. DateDiff ожидает только два аргумента. Вам нужно отфильтровать остальные строки, чтобы получить тот, который вы хотите. Также вы должны убедиться, что несколько «AchangetoB» и «BchangetoC» действительны, если вы не можете, возможно, затянуть схему, чтобы предотвратить это. – nevets1219