我现在很难找到解决问题的办法,你们是我最后的希望。两天以来我一直在努力解决这个难题:
表项:
----------------------------
| id | item | customer |
----------------------------
| 1 | banana | custA |
----------------------------
| 2 | apple | custA |
----------------------------
| 3 | orange | custB |
----------------------------
| 4 | apple | custB |
----------------------------
供应商价格表:
-------------------------------------------------------
| id | item | price | vendor | timestamp |
-------------------------------------------------------
| 1 | banana | 0.23 | VendorA | 564645564 |
-------------------------------------------------------
| 2 | orange | 0.21 | VendorA | 564645564 |
-------------------------------------------------------
| 3 | apple | 0.19 | VendorB | 564645564 |
-------------------------------------------------------
| 4 | banana | 0.22 | VendorB | 564645565 |
-------------------------------------------------------
| 5 | banana | 0.21 | VendorB | 564645567 |
-------------------------------------------------------
有几件事需要注意:
不是每个供应商都有每件商品
一些供应商可能会比其他供应商更频繁地更新其价格,从而导致他们之间的时间戳差距更大
例如,我想知道哪个供应商目前以最好的价格出售香蕉?
我想我首先需要从每个供应商那里得到每件商品的最新价格,然后按价格排序,对吗?但如何以兼容mysql的方式做到这一点呢?
我认为第一部分的正确方法是:
从供应商价格中选择最大(时间戳)、供应商、项目、最小(价格),其中item=“banana”按供应商分组;
但是如何把它和其他标准联系起来呢?
编辑:由于我忘了问题中的一个重要部分,我不得不对第一个表格做一些修改,对不起:(
预期输出:第一个表(custa或custb)中特定客户的所有项目的所有供应商的最新最佳价格
1条答案
按热度按时间pgpifvop1#
您可以对条件使用嵌套的groupwise最大逻辑
演示
如果您使用的是mysql 8+,那么使用窗口函数可以从中获益
编辑获取客户的所有项目(每个项目的最佳价格和供应商)
演示
使用mysql 8中提供的窗口函数和公共表表达式,您可以使用
演示