我需要獲取每個商店中每個產品的最新銷售情況,以瞭解我正在構建的報告。SQL Server:獲取所有項目/商店組的最新購買數據
我可以通過運行一個查詢,如
select top 1
Purchases.ArticleID, Document.StoreID, Purchases.Cost, Document.Date
from
Purchases
join
Document on Purchases.DocumentID = Document.DocumentID
where
ArticleID = 'xxxx' and StoreID=####
order by
Document.Date
但這樣做將意味着運行超過10萬個人查詢,這是一場災難得到一個單行的信息。
此外,查詢實際上更復雜,因爲稅務信息存儲在許多其他表中,所以實際查詢是CASE-WHEN算術的混亂並且與至少4個其他表連接。
每筆採購都使用唯一標識符記錄在採購表中:DocumentID
。 Document
表保存每筆交易的日期(不僅僅是購買)和指向我需要的其他表的鏈接。
我想用一個子查詢來限制DocumentIDs的池,以便查詢將只爲DocumentID的,這對應於最新的採購每個項目的每個商店運行:
where Purchases.DocumentID in
(select max(Purchases.DocumentID) as DocumentID
from Purchases
join Document on Purchases.DocumentID = Document.DocumentID
group by StoreID, ArticleID)
但是 - 當子查詢單獨每個商店ID和每個商品ID(總共7個)只返回一個DocumentID,我只測試了一個ArticleID,主查詢返回了22行。更糟糕的是,我發現單個DocumentID可以在Purchases表中有多個行(我沒有做到這一點 - 我認爲他們這樣做是爲了促銷和其他的東西;像「買2送1」一樣) S)。
基本上,我需要的是一種方法來告訴查詢使用來自每個item-store分組的購物表中的一行的數據。
是一個子查詢的路要走,我應該專注於找出額外的行來自哪裏或有更好的方法嗎?
實際查詢長度爲16行,使用西班牙語,但如果有幫助,我會發布它。
它返回只有3行(而不是7應該)和兩行是同一家商店(有不同的成本和DocDates) – ConnorU
@ConnorU我所提出的解決方案是在黑暗中拍攝。如果你能提供一些細節,我們可以做到這一點。對上述查詢的輕微修改應該適用於您。我只是不知道你在做什麼或者你的表和數據是什麼樣的。如果你可以發佈一個sqlfiddle這將是非常有益的。 –
我設法解決了這個問題 - 我決定使用連接而不是「in」,因爲還有其他變量需要考慮,並且連接能夠爲我解決問題。謝謝你的提議! – ConnorU