Date

為什麼最大日期不起作用?

  • February 21, 2017

我有一個簡單的查詢,我只想返回最近的日期。

我不知道為什麼我不能這樣做:

在此處輸入圖像描述

在我看來,您似乎不太了解如何使用 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 )。

引用自:https://dba.stackexchange.com/questions/164727