【发布时间】:2018-12-07 22:24:15
【问题描述】:
我目前无法为我的问题找到解决方案,你们是我最后的希望。两天以来,我一直在尝试解决这个难题:
表项:
----------------------------
| id | item | customer |
----------------------------
| 1 | banana | custA |
----------------------------
| 2 | apple | custA |
----------------------------
| 3 | orange | custB |
----------------------------
| 4 | apple | custB |
----------------------------
表 vendor_prices:
-------------------------------------------------------
| 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 的方式做到这一点呢?
我认为第一部分的正确方法是:
SELECT MAX(timestamp), vendor, item, MIN(price) FROM vendor_prices WHERE item="banana" GROUP BY vendor;
但是如何将它与所有其他标准联系起来呢?
编辑:我不得不稍微更改第一个表,因为我忘记了问题中的一个重要部分,抱歉:(
预期输出:所有供应商针对第一个表中特定客户(custA 或 custB)的所有商品的最新最优价格
【问题讨论】:
-
添加香蕉项目的预期输出
-
@Hackerman 这确实会生成重复条目,如果两个供应商的时间戳相同(可能发生):(
标签: mysql join groupwise-maximum