Sql-Server
計算然後更新每天數據的最大值的最緊湊方法是什麼?
我有一個數據庫,用於儲存每捆材料的記錄。從每捆中取出一個樣本並送去進行化驗(鉛和硫)。我收到化驗數據並將化驗值寫入記錄。我還取每個化驗的最大值並將它們分配給當天的“樣本”記錄。
一般來說,我一次只接受一天的化驗。然而,有時,我收到了多天的化驗(如果有重新化驗或化驗被延遲)。發生這種情況時,我最終會為所有包含的日期分配最大值,而不是分別為每一天分配最大值。
設置以下查詢以防止將一天的化驗作為另一天的最大值包含在內的更好方法是什麼?
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
,那麼可能是這樣的:UPDATE pOut SET pOut.lead_ppm = ( SELECT MAX(p1.lead_ppm) FROM dbo.production AS p1 WHERE (p1.tank = 'B' or p1.tank = 'C') AND p1.scheduled_pull_date = pOut.scheduled_pull_date ), pOut.sulfur_ppm = ( SELECT MAX(p2.sulfur_ppm) FROM dbo.production AS p2 WHERE (p2.tank = 'B' or p2.tank = 'C') AND p2.scheduled_pull_date = pOut.scheduled_pull_date ) FROM dbo.production AS pOut, dbo.assay_temp AS tOut WHERE pOut.tank = 'S' AND pOut.cell_num = 1 AND pOut.scheduled_pull_date = tOut.formatted_date ;
雖然我也會使用現代語法重寫連接:
FROM dbo.production AS pOut INNER JOIN dbo.assay_temp AS tOut ON pOut.scheduled_pull_date = tOut.formatted_date WHERE pOut.tank = 'S' AND pOut.cell_num = 1
assay_temp
子查詢中似乎根本不需要,而不是匹配子scheduled_pull_date
查詢formatted_date
應該與外部查詢相關。由於您希望按日期進行聚合,因此在我看來子查詢應該與pOut.scheduled_pull_date
.