2016-02-16 59 views
1

RDBMS = Microsoft SQL Server的SQL服務器 - 只有選擇最新日期

我的製冷公司工作,我們想要做跟蹤製冷劑的成本在瓶每個庫存位置被買一個更好的工作。我試圖創建一個SQL查詢來提取這些信息,但我遇到了一些問題。對於每個庫存位置,我想要顯示在庫存位置購買的最後一種成本的製冷劑。我想查看我們記錄此位置購買特定製冷劑的最新日期。我曾嘗試使用Max函數失敗,並且Row_Number函數無法工作。任何幫助將非常感激。

請參閱下面的代碼示例我試圖只顯示每個庫存位置購買的最新日期R-22 30磅水罐。

select 
    lctn_id as Location, 
    invntryitm_id as InventoryItemID, 
    invntryitm_nme as InventoryItemName, 
    prchseordrlst_dte_rqstd as DateRequested, 
    prchseordrlst_unt_cst as UnitCost 
from 
    invntryitm 
join 
    prchseordrlst on prchseordrlst.invntryitm_rn = invntryitm.invntryitm_rn 
join 
    prchseordr on prchseordr.prchseordr_rn = prchseordrlst.prchseordr_rn 
join 
    lctn on lctn.lctn_rn = prchseordr.lctn_rn 
where 
    invntryitm.invntryitm_nme ='REFRIGERANT R-22 30#' 
    and lctn_obslte = 'N' 
group by 
    lctn.lctn_id, invntryitm.invntryitm_id, invntryitm.invntryitm_nme, 
    prchseordrlst.prchseordrlst_unt_cst 
order by 
    lctn_id 
+0

爲什麼你不能使row_number函數工作?你有錯誤嗎?請發佈您的嘗試,以便我們可以調試它。 –

+0

老實說,我從來沒有使用row_number函數,我不明白它。 –

回答

2

我想解析/窗口化功能會給你你需要的東西:

with location_data as (
    select 
    lctn_id as Location, 
    invntryitm_id as InventoryItemID, 
    invntryitm_nme as InventoryItemName, 
    prchseordrlst_dte_rqstd as DateRequested, 
    prchseordrlst_unt_cst as UnitCost, 
    max (prchseordrlst_dte_rqstd) over (partition by lctn_id) as max_date 
    from 
    invntryitm 
    JOIN prchseordrlst on prchseordrlst.invntryitm_rn = invntryitm.invntryitm_rn 
    JOIN prchseordr on prchseordr.prchseordr_rn = prchseordrlst.prchseordr_rn 
    JOIN lctn on lctn.lctn_rn = prchseordr.lctn_rn 
    where 
    invntryitm.invntryitm_nme ='REFRIGERANT R-22 30#' and 
    lctn_obslte = 'N' 
) 
select * 
from location_data 
where max_date = DateRequested 
order by Location 

請記住,如果出現平局,與同日起二LOCATION_ID記錄,那麼你會得到他們都回來了。如果這是一個問題,那麼你可能想row_number(),而不是max()

row_number() over (partition by lctn_id order by prchseordrlst_dte_rqstd desc) as rn 

然後你會

where rn = 1 

拿到第一排

我之所以沒有列出row_number()首先是max是O(n),如果你的數據有日期和時間,它可能就足夠你需要的。

+0

非常感謝Hambone!這兩種解決方案效果很好。 –