我有一个数据库,用于存储每捆材料的记录。从每个捆中取出样本并送出进行化验(铅和硫)。我收到化验数据并将化验值写入记录。我还为每个化验取最大值并将它们分配给当天的“样本”记录。
一般来说,我一次只收到一天的化验。然而,有时,我会收到多天的化验(如果有重新化验或化验被延迟)。发生这种情况时,我最终会为所有包含的日期分配最大值,而不是分别为每一天分配最大值。
什么是更好的方法来设置以下查询以防止一天的化验被包含为另一天的最大值?
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
代码已更新为使用不同命名的别名并包含所需的括号。我相信现在我将收到铅和硫的单一最大值,很可能从最早的日期开始。我需要改进这一点,以便每天通过化验获得最大值,并将该值写入适当日期的“样本”记录。
我不完全确定,但如果聚合结果应该是每个日期并且日期是
production.scheduled_pull_date
,那么也许是这样的:尽管我也会使用现代语法重写连接:
在
assay_temp
子查询中似乎根本不需要,而不是匹配scheduled_pull_date
子formatted_date
查询应该与外部查询相关联。因为你想要每个日期的聚合,所以在我看来子查询应该与pOut.scheduled_pull_date
.