[英]sql with max and several joins
我試圖獲得每個客戶在mysql上為每種產品支付的最新價格。 下面的SQL沒有給我正確的數據。 max(dateLasFullfillment)並沒有太大的行值,甚至沒有最大vsalue。 它就像最大之前的作品。
select
'item' AS type, soitem.productnum as 'SKU',
(soitem.unitprice / right(uom.code, length(uom.code) - 2)) as unitPrice,
replace(customer.name, "#", "") AS priceList,
max(soitem.dateLastFulfillment)
from
soitem
left join
so ON so.id = soitem.soid
left join
customer on so.customerid = customer.id
left join
product on product.num = soitem.productnum
left join
uom on product.uomid = uom.id
where
soitem.dateLastFulfillment > now() - interval 6 month
and soitem.unitprice > 0
and so.statusid in (20, 25, 60)
group by
soitem.productnum, customer.name
order by
PriceList
以下是一些具有預期結果的表樣本。 除非沒有其他選擇,否則sql必須以select語句開頭,沒有聲明等。
SO表:
id billToName customerid dateCompleted dateCreated dateIssued num
1 Name1 1 6/27/18 6/23/18 6/23/18 ordernum1
2 Name1 1 7/15/18 7/10/18 7/10/18 ordernum2
3 Name1 1 7/29/18 7/20/18 7/20/18 ordernum3
4 Name2 2 6/31/2018 6/30/18 6/30/18 ordernum4
5 Name2 2 7/27/18 7/26/18 7/26/18 ordernum5
6 Name3 3 8/8/18 8/5/18 8/5/18 ordernum6
7 Name3 3 7/25/18 7/20/18 7/20/18 ordernum7
SOITEM表:
id soId unitPrice dateLastFulfillment productId productNum statusId uomId qtyOrdered
1 1 10 6/27/18 1 SKU-1 50 11 3
2 1 20 6/27/18 2 SKU-2 50 12 5
3 1 30 6/27/18 3 SKU-3 50 13 6
4 2 11 7/15/18 1 SKU-1 50 11 11
5 2 21 7/15/18 2 SKU-2 50 12 44
6 2 31 7/15/18 3 SKU-3 50 13 5
7 3 12 7/29/18 1 SKU-1 50 11 5
8 3 22 7/29/18 2 SKU-2 50 12 6
9 4 23 6/31/2018 2 SKU-2 50 12 9
10 4 33 6/31/2018 3 SKU-3 50 13 12
11 5 24 7/27/18 2 SKU-2 50 12 14
12 5 34 7/27/18 3 SKU-3 50 13 35
13 6 25 8/8/18 2 SKU-2 50 12 22
14 6 35 8/8/18 3 SKU-3 50 13 55
15 7 26 7/25/18 2 SKU-2 50 12 22
16 7 36 7/25/18 3 SKU-3 50 13 11
產品表:
num uomid
SKU-1 11
SKU-2 12
SKU-3 13
UOM表:
id code
11 cs10
12 cs20
13 cs30
客戶表:
ID NAME
1 CUSTOMER1#
2 CUSTOMER2#
3 CUSTOMER3#
預期成績:
type SKU unitPrice priceList max(soitem.dateLastFulfillment)
item SKU-1 1.2 customer1 7/29/18
item SKU-2 1.1 customer1 7/29/18
item SKU-3 1.03 customer1 7/15/18
item SKU-2 1.2 customer2 7/27/18
item SKU-3 1.13 customer2 7/27/18
item SKU-2 1.25 customer3 8/8/18
item SKU-3 1.17 customer3 8/8/18
試試吧,只是代碼的第一部分,然后看看您得到了什么。 然后粘貼您的其他Joins等。(刪除前兩個舊的where項目,以及所有分組依據)
-- compute this once, instead of for each row
Declare @now_minus_6mos as date = DATEADD(month, -6, GETDATE());
print @now_minus_6mos;
select
'item' AS type, soitem.productnum as 'SKU',
(soitem.unitprice / 1 ) as unitPrice, -- I do not have UOM, so simplify to be one
-- I do not have Customer replace(customer.name, "#", "") AS priceList,
(soitem.dateLastFulfillment) -- remove the max, since we are getting only the last one
from
(Select * From
(Select
productnum
,unitprice
,dateLastFulfillment
,Row_Number() Over(Partition By productnum Order By dateLastFulfillment DESC) as dlfRow
From soitem
--move where filters here to reduce number of rows returned
Where
soitem.dateLastFulfillment > @now_minus_6mos
and soitem.unitprice > 0
) aa
Where dlfRow = 1
) soitem
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.