我试图得到每个客户在mysql上为每个产品支付的最后价格。下面的sql没有提供正确的数据。max(datelasfullfillment)不包含行值,甚至不包含max v值。这就像是最大值之前的工作组。
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语句、NODECLARE等开头,除非没有其他选项。
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
计量单位表:
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
2条答案
按热度按时间flvtvl501#
试试这个,只是代码的第一部分,看看你得到了什么。然后粘贴其他连接等(删除前两个旧where项和所有group by)
czfnxgou2#
你可以用“排名”功能来实现。它们在mysql中并不存在,但是你可以模仿它们。
请看这篇文章。
mysql中的rank函数