我正在使用mysql,我有以下两个表:
产品介绍:
| id | name |
|----|-----------|
| 1 | Product 1 |
| 2 | Product 2 |
| 3 | Product 3 |
价格:
| id | Product_id | created_at | prices |
|----|------------|---------------------|--------|
| 1 | 1 | 2017-12-23 08:32:11 | 10 |
| 2 | 1 | 2017-11-21 03:33:10 | 12 |
| 3 | 2 | 2017-12-23 08:32:11 | 43 |
| 4 | 2 | 2017-11-21 03:33:10 | 23 |
| 5 | 3 | 2017-12-23 08:32:11 | 78 |
| 6 | 3 | 2017-11-21 03:33:10 | 34 |
如果我做:
SELECT * FROM prices WHERE prices.id IN ( SELECT MAX(prices.id) FROM prices GROUP BY prices.created_at )
这给了我每个product_id的最后价格:
| id | Product_id | created_at | prices |
|----|------------|---------------------|--------|
| 1 | 1 | 2017-12-23 08:32:11 | 10 |
| 3 | 2 | 2017-12-23 08:32:11 | 43 |
| 5 | 3 | 2017-12-23 08:32:11 | 78 |
我希望最终结果所有产品都具有最新价格,如下所示:
| id | name | product_id | created_at | prices |
|----|-----------|------------|---------------------|--------|
| 1 | Product 1 | 1 | 2017-12-23 08:32:11 | 10 |
| 2 | Product 2 | 2 | 2017-12-23 08:32:11 | 43 |
| 3 | Product 3 | 3 | 2017-12-23 08:32:11 | 78 |
但是,我不确定如何结合:
select * from products
和
SELECT * FROM prices WHERE prices.id IN ( SELECT MAX(prices.id) FROM prices GROUP BY prices.created_at )
我非常感谢你的回复!
假设您的第一个查询给出了预期结果,请使用join
。
SELECT p.*,d.name FROM prices p
inner join product d
on d.id=p.product_id
WHERE
p.id IN
( SELECT MAX(prices.id) FROM prices GROUP BY prices.created_at )
如果您认为price
中有产品ID未在product
中映射,则使用left join
而不是inner join
。
我认为你已经获得了产品名称的最大总价,所以下面是根据你给定的表查询
选择price.id,products.id,products.product,sum(prices.prices)作为总价格从价格加入产品price.id = products.id group by price.id order by Totalprices desc limit 1
希望它对你有所帮助
假设最新的价格是最近创建的价格并由prices.created_at
值描述,为了获得最新价格,您可以更好地依赖prices.created_at
,而不是按照prices.id
(自动增量)的时间顺序排列,如:
SELECT products.id, products.name, prices.created_at, prices.prices
FROM products
INNER JOIN prices ON products.id=prices.product_id
INNER JOIN
(SELECT product_id, MAX(created_at) AS created_at FROM prices GROUP BY product_id) AS LATEST_PRICES
on prices.product_id=LATEST_PRICES.product_id
-- WHERE prices.created_at = LATEST_PRICES.created_at
AND prices.created_at = LATEST_PRICES.created_at