為什麼最大日期不起作用?
我有一個簡單的查詢,我只想返回最近的日期。
我不知道為什麼我不能這樣做:
在我看來,您似乎不太了解如何使用 GROUP BY。
使用 GROUP BY 的查詢將辨識分組列的唯一值集,然後允許您對數據集中的任何其他行使用聚合函式。
所以,首先你說過,給我查詢中四列的唯一值。
然後,您說,給我每個唯一值集標識的所有行的最大 pc.recalc_date。
由於 pc.recalc_date 是您分組依據的值之一,因此每個組中的所有記錄都將具有相同的 pc.recalc_date。
我假設,對於每個部分 # 和描述,您需要最近一次成本變化的日期,以及該成本是多少。
沒有更多資訊,很難為您提供具體的解決方案並保證它會起作用。我們不知道您使用的是什麼數據庫,更不用說該數據庫的版本了。同樣,我們不知道您的列的數據類型和長度。
我相信最通用的答案將是一個兩步過程。首先,確定每個零件最近一次價格變動的日期;然後,得到相應的價格。我假設您的元件號最長為 20 個字元,您的描述最長為 250 個字元,並且您的 pc.recalc_date 列的類型是
datetime
;替換為您系統的有效值。這看起來像這樣(假設您可以使用您的語言訪問臨時表): CREATE TABLE #latest_price_change (part_no varchar(20), part_desc varchar(250), recalc_date datetime)
INSERT INTO #latest_price_change (part_no, part_desc, recalc_date) SELECT pvp.part_no, pvp.name, MAX(pc.recalc_date) FROM part_v_part as pvp JOIN part_v_part_cost as pc ON pvp.part_key = pc.part_key WHERE pvp.part_status <> 'inactive' AND pvp.part_status <> 'obsolete' AND pvp.part_source_key = '373' AND pvp.part_no = '90-0018' GROUP BY pvp.part_no, pvp.name SELECT lpc.part_no as 'Part No.', lpc.part_desc as 'Description', lpc.recalc_date as 'Previous Update', pc.cost as 'Previous Std. Cost' FROM #latest_price_change as lpc JOIN part_v_part as pvp ON lpc.part_no = pvp.part_no AND lpc.part_desc = pvp.name JOIN part_v_part_cost as pc ON pvp.part_key = pc.part_key AND lpc.recalc_date = pc.recalc_date
在設置了一個 part_v_part 和一個 part_v_part_cost 表後,該表返回的三行與您在使用查詢時所做的相同,我剛剛返回了查詢的最後一行。
僅供參考 - 我使用 MS SQL Server 2012 對此進行了測試。
希望這可以幫助。
您已按列將pc.cost添加為一個組。這意味著您的查詢將提取pc.cost的所有(不同)值以及與它們關聯的所有記錄。
您要麼需要從 SELECT 和 GROUP BY 中刪除pc.cost ,要麼還需要在****pc.cost上添加一個函式(MAX、MIN 等)(並且無論如何從 GROUP BY中刪除pc.cost )。