Inquérito 005, "Quem ligou primeiro": solução passo a passo
O boletim
O paiol da Cooperativa Agrícola, na Estrada do Café, pegou fogo na madrugada de sábado, 24 de maio. Queimaram cento e vinte sacas de milho, a estrutura de madeira e metade do telhado. Ninguém se machucou. O caseiro, que dorme no sítio vizinho, diz que acordou com o clarão.
O bombeiro é de Cambé e chegou às cinco e dez, quando já não tinha o que fazer.
Ocorrência 227, categoria outros, prejuízo de vinte e dois mil reais. Dona Terezinha, gerente da cooperativa, quer laudo rápido por causa do seguro, e o seguro só paga se não for descuido de funcionário.
A delegacia não tem perito e não vai ter. O que ela tem é o arquivo: o livro do 190, que anota a hora com minuto e o telefone de quem ligou, e o livro do balcão, que anota quem veio dar queixa. Cinco nomes deram depoimento no balcão. A chefia quer um nome antes que o seguro decida sozinho.
O que o caso ensina: ORDER BY e LIMIT.
Pergunta 1
Na madrugada de sábado, 24 de maio de 2003, o livro do 190 não parou. Traga todo chamado desse dia, na ordem em que o telefone tocou.
Ver as dicas do jogo
- Na madrugada de sábado, 24 de maio de 2003, o livro do 190 não parou. Traga da tabela `chamado` o `momento`, o `telefone`, o `lugar_informado`, o `resumo` e a `ocorrencia` de cada chamado desse dia, na ordem do `momento`.
- O dia inteiro é o `momento` que começa por '2003-05-24', com LIKE e o porcento no fim. A fila do relógio é ORDER BY na mesma coluna.
- Escreva: `SELECT momento, telefone, lugar_informado, resumo, ocorrencia FROM chamado WHERE momento LIKE '2003-05-24%' ORDER BY momento;`
Ver a consulta que resolve
SELECT momento, telefone, lugar_informado, resumo, ocorrencia FROM chamado WHERE momento LIKE '2003-05-24%' ORDER BY momento;
ORDER BY põe o resultado na ordem da coluna que você escolher. Sem ele o arquivo devolve na ordem em que guardou, e uma noite fora de ordem não conta a noite.
Resultado
| momento | telefone | lugar_informado | resumo | ocorrencia |
|---|---|---|---|---|
| 2003-05-24 00:12 | 3452-3390 | Vila Aurora | Som alto em festa na rua 7 | 0 |
| 2003-05-24 01:05 | 3452-1902 | Centro | Discussão de casal na praça | 225 |
| 2003-05-24 02:14 | 3452-2040 | Estrada do Café, km 11 | Ônibus da Viação Falcão parado na pista com passageiros, sem sinalização | 226 |
| 2003-05-24 03:51 | 3452-1187 | Nova Aurora | Cheiro de fumaça e clarão para os lados da cooperativa | 0 |
| 2003-05-24 04:02 | 3452-2040 | Estrada do Café | Fogo no paiol da cooperativa | 227 |
| 2003-05-24 04:06 | 3452-5133 | Estrada do Café | Fogo grande na cooperativa, pede bombeiro | 0 |
| 2003-05-24 04:19 | 3452-4477 | Estrada do Café | Fogo no paiol, pede bombeiro de Cambé | 0 |
| 2003-05-24 05:02 | 3452-6120 | Nova Aurora | Reclama de cheiro de queimado | 0 |
| 2003-05-24 06:40 | 3452-2040 | Estrada do Café | Informa que o fogo foi controlado | 0 |
Pergunta 2, a que o caso puxa no meio do caminho
O livro do 190 anotou três números de ocorrência nessa madrugada: 225, 226 e 227. Traga as três folhas do arquivo.
Ver as dicas do jogo
- Na madrugada de 24 de maio, o livro do 190 anotou três números de ocorrência: 225, 226 e 227. Traga da tabela `ocorrencia` o `id`, a `data`, a `hora`, a `categoria` e o `resumo` de cada um deles.
- Três números, uma lista: entre parênteses e separados por vírgula, depois de IN, para a coluna `id`.
- Escreva: `SELECT id, data, hora, categoria, resumo FROM ocorrencia WHERE id IN (225, 226, 227);`
Ver a consulta que resolve
SELECT id, data, hora, categoria, resumo FROM ocorrencia WHERE id IN (225, 226, 227);
A lista do IN pede o que você quer. O que o arquivo devolve é o que ele tem, e as duas coisas nem sempre são iguais.
Resultado
| id | data | hora | categoria | resumo |
|---|---|---|---|---|
| 225 | 2003-05-24 | 01:05 | perturbacao | Discussão de casal na praça |
| 226 | 2003-05-24 | 02:14 | outros | Ônibus parado no km 11 com passageiros, sem sinalização |
| 227 | 2003-05-24 | 04:20 | outros | Incêndio no paiol da Cooperativa; sem feridos |
Pergunta 3
Os chamados dessa madrugada vieram de sete telefones. Traga do fichário quem tem algum deles.
Ver as dicas do jogo
- De quem são os telefones que ligaram para o 190 nesse dia? Traga da tabela `pessoa` o `id`, o `nome`, o `apelido`, a `ocupacao`, o `bairro_id` e o `telefone` de quem tem algum deles.
- Os sete números vão numa lista, depois de IN, cada um entre aspas simples, para a coluna `telefone`. Um deles aparece três vezes na grade do 190: na lista, basta uma.
- Escreva: `SELECT id, nome, apelido, ocupacao, bairro_id, telefone FROM pessoa WHERE telefone IN ('3452-3390', '3452-1902', '3452-2040', '3452-1187', '3452-5133', '3452-4477', '3452-6120');`
Ver a consulta que resolve
SELECT id, nome, apelido, ocupacao, bairro_id, telefone FROM pessoa WHERE telefone IN ('3452-3390', '3452-1902', '3452-2040', '3452-1187', '3452-5133', '3452-4477', '3452-6120');
IN troca uma fila de OR por uma lista: a linha volta se o valor estiver em qualquer lugar dela. E um valor pode estar em mais de uma linha da mesma gaveta, e o WHERE traz todas.
Resultado
| id | nome | apelido | ocupacao | bairro_id | telefone |
|---|---|---|---|---|---|
| 4 | Valdemar Prestes | Cabeção | investigador | 3 | 3452-1902 |
| 32 | Cleuza Mariano | diarista | 5 | 3452-1187 | |
| 33 | Wagner Mariano | Waguinho | ajudante de pedreiro | 5 | 3452-1187 |
| 34 | Elias Vasques | Lió | caseiro da Cooperativa | 7 | 3452-5133 |
Pergunta 4
Traga os dez papéis mais novos do livro do balcão, do mais novo para o mais velho.
Ver as dicas do jogo
- O livro do balcão, a tabela `protocolo`, anota todo papel que entra na delegacia. Traga o `id`, a `data`, o `tipo`, o `assunto`, o `requerente` e a `ocorrencia` dos dez papéis de número mais alto, do mais novo para o mais velho.
- Número de protocolo é ordem de chegada: ordene pelo `id` com DESC, e corte com LIMIT 10, no fim.
- Escreva: `SELECT id, data, tipo, assunto, requerente, ocorrencia FROM protocolo ORDER BY id DESC LIMIT 10;`
Ver a consulta que resolve
SELECT id, data, tipo, assunto, requerente, ocorrencia FROM protocolo ORDER BY id DESC LIMIT 10;
DESC vira a ordem de trás para a frente. LIMIT corta o resultado no tamanho que você pedir, e é por vir depois do DESC que ele guarda os dez mais novos, e não os dez mais velhos.
Resultado
| id | data | tipo | assunto | requerente | ocorrencia |
|---|---|---|---|---|---|
| 373 | 2003-05-24 | ocorrencia | Incêndio no paiol da Cooperativa | 34 | 227 |
| 372 | 2003-05-24 | ocorrencia | Ônibus parado no km 11 com passageiros, sem sinalização | 0 | 226 |
| 371 | 2003-05-21 | pedido | Pedido de segunda via de termo de entrega | 128 | 0 |
| 370 | 2003-05-19 | pedido | Pedido de vista dos autos do inquérito 14 | 13 | 0 |
| 369 | 2003-05-19 | pedido | Pedido de cópia de boletim de ocorrência | 98 | 0 |
| 368 | 2003-05-19 | oficio | Ofício da prefeitura sobre iluminação da praça | 0 | 0 |
| 367 | 2003-05-14 | oficio | Ofício da companhia de energia sobre religação | 0 | 0 |
| 366 | 2003-05-08 | pedido | Pedido de cópia de termo de declaração | 147 | 0 |
| 365 | 2003-05-06 | ocorrencia | Estelionato — falso leiturista, terceiro caso, no Alto do Cruzeiro | 31 | 224 |
| 364 | 2003-05-06 | requisicao | Requisição de antecedentes pelo fórum | 0 | 0 |
Pergunta 5, a que o caso puxa no meio do caminho
Terça de manhã. Traga as cinco ocorrências mais novas do arquivo, da mais nova para a mais velha.
Ver as dicas do jogo
- Traga da tabela `ocorrencia` o `id`, a `data`, a `hora`, a `categoria` e o `resumo` das cinco ocorrências de número mais alto, da mais nova para a mais velha.
- É a receita do livro do balcão em outra gaveta: ordene pela coluna `id` com DESC e corte com LIMIT. Pela `data` não serve: duas ocorrências do mesmo dia empatam, e o empate sai em qualquer ordem.
- Escreva: `SELECT id, data, hora, categoria, resumo FROM ocorrencia ORDER BY id DESC LIMIT 5;`
Ver a consulta que resolve
SELECT id, data, hora, categoria, resumo FROM ocorrencia ORDER BY id DESC LIMIT 5;
É a mesma receita do livro do balcão: DESC vira a fila e LIMIT corta. Número de arquivo é ordem de chegada, e por isso quem ordena é o `id`: pela `data`, duas folhas do mesmo dia empatam, e o empate a máquina resolve como quiser.
Resultado
| id | data | hora | categoria | resumo |
|---|---|---|---|---|
| 227 | 2003-05-24 | 04:20 | outros | Incêndio no paiol da Cooperativa; sem feridos |
| 225 | 2003-05-24 | 01:05 | perturbacao | Discussão de casal na praça |
| 224 | 2003-05-06 | 10:40 | estelionato | Falso leiturista, terceiro caso; vítima informou o número do relógio |
| 223 | 2003-05-02 | 19:03 | acidente | Queda de motociclista em piso molhado, anotado para averiguação |
| 222 | 2003-04-26 | 15:39 | furto | Furto de botijão de gás da área de serviço, sem providência no momento |
Pergunta 6
Traga as dez ocorrências mais novas da Nova Aurora, o bairro que o arquivo numera como 5, da mais nova para a mais velha.
Ver as dicas do jogo
- A tabela `ocorrencia` de novo, agora de um bairro só. Traga o `id`, a `data`, a `categoria` e o `resumo` das dez ocorrências de número mais alto da Nova Aurora, o `bairro_id` 5, da mais nova para a mais velha.
- É a receita do livro do balcão com uma condição antes: primeiro o WHERE do bairro, depois ORDER BY `id` com DESC, e o LIMIT 10 por último. O corte trabalha só com o que o bairro deixou passar.
- Escreva: `SELECT id, data, categoria, resumo FROM ocorrencia WHERE bairro_id = 5 ORDER BY id DESC LIMIT 10;`
Ver a consulta que resolve
SELECT id, data, categoria, resumo FROM ocorrencia WHERE bairro_id = 5 ORDER BY id DESC LIMIT 10;
O WHERE filtra primeiro, e o ORDER BY com LIMIT trabalha só com o que sobrou: as dez de número mais alto de um bairro, e não do arquivo inteiro. Número de arquivo é ordem de chegada, então o número mais alto é o papel mais novo.
Resultado
| id | data | categoria | resumo |
|---|---|---|---|
| 216 | 2003-03-28 | furto | Furto de roupas do varal de uma residência, sem testemunhas |
| 204 | 2003-02-01 | furto | Furto de mercadoria de dentro de veículo destrancado, comunicado por telefone ao 190 |
| 199 | 2003-01-16 | outros | Queimada sem autorização em terreno da Nova Aurora; Wagner Mariano orientado e liberado |
| 198 | 2003-01-11 | outros | Achado de documento na via pública, com testemunha ouvida no local |
| 194 | 2002-12-17 | dano | Pneu de veículo estacionado cortado, sem providência no momento |
| 189 | 2002-11-25 | perturbacao | Bate-boca na saída do ginásio, comunicado por telefone ao 190 |
| 182 | 2002-10-19 | desaparecimento | Idoso se perdeu no caminho de volta da feira, anotado para averiguação |
| 170 | 2002-08-27 | perturbacao | Bate-boca na saída do ginásio, sem testemunhas |
| 168 | 2002-08-22 | dano | Muro dos fundos do mercadinho danificado a marretadas |
| 100 | 2001-09-27 | dano | Portão de residência amassado por veículo em manobra, sem testemunhas |
Quem foi
Ver o culpado e a prova
O culpado é Wagner Mariano.
As provas que fecham o caso:
- A ocorrência 199, de 16 de janeiro: queimada sem autorização num terreno da Nova Aurora, com o Wagner Mariano orientado e liberado.
O Wagner veio com a mãe. Ela entrou na frente e falou primeiro, que é o que mães fazem, e o que ela falou foi que tinha ligado porque sentiu cheiro. Seu Jaime deixou ela terminar inteiro e depois leu, sem levantar a voz, duas folhas do livro do 190: a dela, das três e cinquenta e um, e a de outro telefone da Nova Aurora, que reclamou do cheiro de queimado às cinco e dois. No bairro dela, o cheiro chegou uma hora e onze minutos depois do telefonema.
Dona Cleuza sentou. O Wagner ficou em pé e contou tudo em três frases, do jeito de quem repetiu na cabeça a noite inteira: o mato estava alto, ele queria passar de moto, o vento virou.
Ficou no artigo de incêndio culposo e vai responder solto. O seguro da cooperativa, esse, não paga, e não foi por culpa do caseiro.
Antes de desligar, Seu Jaime pediu de novo a folha 226, a do ônibus parado no km 11, que você tinha lido para ele na segunda. O arquivo devolveu nada. Ele disse que devia ser erro de digitação e ficou olhando o nada por um tempo que não cabe num boletim. Dona Sirlei ainda estava no balcão quando você saiu.