Eu tenho um banco de dados que armazena registros para cada pacote de material. Uma amostra é retirada de cada pacote e enviada para análise (para chumbo e enxofre). Recebo os dados do ensaio e gravo o valor do ensaio no registro. Também pego o valor máximo de cada ensaio e o atribuo ao registro de "amostra" do dia.
Geralmente, recebo apenas ensaios de um dia de cada vez. No entanto, ocasionalmente, recebi os testes por vários dias (se houve um novo teste ou os testes foram atrasados). Quando isso acontece, acabo atribuindo o máximo para todos os dias incluídos ao invés de para cada dia separadamente.
Qual é a melhor maneira de configurar a consulta a seguir para evitar que os ensaios de um dia sejam incluídos como um valor máximo para outro dia?
UPDATE pOut
SET
pOut.lead_ppm = (SELECT MAX(p1.lead_ppm)
FROM production p1, assay_temp t1
WHERE (p1.tank = 'B' or p1.tank = 'C')
AND p1.scheduled_pull_date = t1.formatted_date),
pOut.sulfur_ppm = (SELECT MAX(p2.sulfur_ppm)
FROM production p2, assay_temp t2
WHERE (p2.tank = 'B' or p2.tank = 'C')
AND p2.scheduled_pull_date = t2.formatted_date)
FROM production pOut, assay_temp tOut
WHERE pOut.tank = 'S'
AND pOut.cell_num = 1
AND pOut.scheduled_pull_date = tOut.formatted_date
O código foi atualizado para usar aliases com nomes diferentes e incluir os parênteses necessários. Acredito que agora receberei um único máximo para chumbo e enxofre, provavelmente desde a data mais próxima. Preciso melhorar isso para obter um valor máximo para cada dia com ensaios e gravar esse valor no registro de "amostra" do dia adequado.
Não tenho certeza, mas se os resultados agregados devem ser por data e a data é
production.scheduled_pull_date
, então talvez isto:Embora eu também reescrevesse a junção usando a sintaxe contemporânea:
O
assay_temp
não parece necessário nas subconsultas e, em vez de corresponderscheduled_pull_date
àsformatted_date
subconsultas, deve se correlacionar com a consulta externa. Como você deseja agregações por data, pareceu-me que as subconsultas deveriam corresponder apOut.scheduled_pull_date
.