tenho a seguinte tabela
CREATE TABLE TaskJournal (
TaskJournalId INT NOT NULL AUTO_INCREMENT,
TaskId INT NOT NULL,
TaskStatus TINYINT NOT NULL,
TaskStart INT NOT NULL,
TaskEnd INT NULL,
TaskInfo TEXT,
PRIMARY KEY (TaskJournalId)
) ENGINE = InnoDB;
INSERT INTO TaskJournal (TaskId, TaskStatus, TaskStart, TaskEnd, TaskInfo)
VALUES (2, 1, 1533660028, 1533660500, "No issues present"),
(3, 3, 1533660505, 1533660506, "Exception found: Line 95"),
(2, 1, 1533660015, 1533660018, "No issues present"),
(2, 3, 1533660509, 1533660512, "Exception found: Line 95"),
(2, 1, 1533660515, 1533660530, "No issues present");
O problema é este, quero reunir uma lista de erros mas apenas se no futuro não houver resolução.
Idealmente, eu receberia algo assim de volta
| TaskJournalId | TaskId | TaskStatus | TaskStart | TaskEnd | TaskInfo |
| 3 | 2 | 1 | 1533660015 | 1533660018 | No issues present |
Só porque no futuro não há algum TaskId que tenha a exceção presente.
Então eu pensei que poderia fazer isso por meio de um grupo de subconsultas algo como o seguinte:
SELECT *
FROM TaskJournal
WHERE TaskId = 2
GROUP BY TaskId, TaskStatus
HAVING TaskStatus=3
ORDER BY TaskStart DESC
Mas o problema com isso é que ele retorna as duas linhas 4 e 2 (ordem cronológica decrescente). Mas em algum momento posterior parece ter havido uma resolução para TaskId=2, mas não para TaskId=3.
Qualquer idéia será útil.
MySQL-5.5
Desapontamento.
Parece que as funções analíticas não são suportadas na v5.5
Se isso acontecesse, a solução seria algo como:
Minha resposta
Atualize seu banco de dados.
Parece que você deseja obter a lista de problemas para cada um
TaskId
que segue a última ocorrência doNo issues present
ou exatamente a stringNo issues present
se essa lista estiver vazia com certezaTaskId
. O caso especial se não houver um únicoNo issues present
, mas houver alguns erros com certezaTaskId
.Acontece que isso não era tão complicado quanto eu pensava, pelo menos quando dei um passo para trás e olhei para o problema novamente. Abaixo está a consulta que criei (e alguns pequenos floreios para aprimorar a saída).