如何从 MYSQL 中的数据透视表中获取最后更新的价格

Posted

技术标签:

【中文标题】如何从 MYSQL 中的数据透视表中获取最后更新的价格【英文标题】:How to get the last updated price from a pivot table in MYSQL 【发布时间】:2017-09-03 21:23:09 【问题描述】:

这里是表架构

客户

------------------------------
id  name
------------------------------
1   joe
4   jane

产品

------------------------------
id  title 
------------------------------
1   iphone  
2   ipad

customers_products

------------------------------
id  product_id  customer_id
------------------------------
1   1       1   
2   2       1
3   1       5
4   1       9

价格

-------------------------------------------
id  product_id  price   created_at 
-------------------------------------------
3   1       300         2017-04-01
4   2       450         2017-04-01
5   2       500         2017-04-02
6   1       320         2017-04-04
7   1       200         2017-04-05

我想要得到的是按用户 ID 分类的每种产品的最后价格结果,像这样

user_id product_id       last_price
1       1                200            

1 号产品的最后更新价格(price_history 第 7 行)

这是我迄今为止所做的,它给出了错误的结果

select 
id,prices.price as current_price,customers_products as price
from prices
join products on products.id = prices.product_id
join customers_products on customers_products.product_id = prices.product_id
where customers_products.customer_id = 1
group by prices.product_id order by prices.id desc 

非常感谢你们的帮助!

谢谢!

【问题讨论】:

查询的输出是什么,输出到底有什么问题? 【参考方案1】:

您可以在 where 中使用一个元组来获得最高价格加入您的 customers_products

select  customers_products.customer_id , customers_products.product_id, prices.price as last_price
from customers_products
inner join prices on prices.product_id = customers_products
where ( created_at ,product_id) in (
    select max(created_at ), product_id  
    from price 
    group product_id
)

【讨论】:

以上是关于如何从 MYSQL 中的数据透视表中获取最后更新的价格的主要内容,如果未能解决你的问题,请参考以下文章

如何删除透视表中的很多汇总行

多对多关系 - 如何更新数据透视表中的属性

如何从数据透视表中获取数据?

laravel4 更新数据透视表中的附加列

从 SQL Server DB 更新单独工作表中的数据后自动刷新 Excel 2007 数据透视表

如何从 MySQL 数据库中获取最后一个插入值并更新 Access 中的字段?