Я пишу запрос для большой таблицы. Я совсем не в базы данных. Запрос выглядит очень большим, и я чувствую, что он может быть сокращен, но, похоже, не нашел пути. Я попытался использовать предложение WITH, которое сделало бы запрос проще. Однако я не могу это использовать.
Следующий запрос:
SELECT id,
name,
Count(name),
SUM(event.time_spent_millis),
flag,
template
FROM event
WHERE event.host = 'mantis'
AND event .` input ` NOT LIKE '%random%'
AND id IN (SELECT event1.id
FROM event AS event1
WHERE ( event1.host = 'mantis'
AND timestamp BETWEEN 1559337058633 AND 1559683282607
AND template IN ( 'wrap' )
AND event1.flag = '22'
AND event1.name = 'jack' ))
OR id IN (SELECT a.id
FROM event AS a
WHERE a .` input ` LIKE '%random%'
AND a.name = 'jack'
AND a.host = 'mantis'
AND template IN ( 'wrap' )
AND timestamp BETWEEN 1559337058633 AND 1559683282607
AND a.flag IN ( '0', '1' )
AND a.id NOT IN (SELECT b.id
FROM event AS b
WHERE b.flag = '22'
AND b.host = 'mantis'
AND b.timestamp BETWEEN
1559337058633 AND
1559683282607
AND b.name = 'jack'))
GROUP BY id,
name
Пример данных:
id name time flag template
aaa123 jack 6561 22 wrap
aaa123 matt 18 NULL NULL
aaa123 matt1 1126 0 NULL
baa123 jack 6561 22 wrap
baa123 matt 18 NULL NULL
baa123 matt1 1126 0 NULL
Подводя итог, что я хочу в результате:
Для данного ввода я хочу, чтобы все имя, связанное с флагом, и имена, связанные с этим именем.
В приведенных данных выходной сигнал будет идентифицирован для флага 22 * 1014 *, jack имеет 2 count и others имеет 4 количество и время - это сумма всех (включая джек и др.).
Запрос не дает желаемого результата, потому что он становился все более сложным.