将最新记录与表格相结合

问题描述 投票:0回答:3

我正在使用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 ) 

我非常感谢你的回复!

mysql sql database
3个回答
1
投票

假设您的第一个查询给出了预期结果,请使用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


0
投票

我认为你已经获得了产品名称的最大总价,所以下面是根据你给定的表查询

选择price.id,products.id,products.product,sum(prices.prices)作为总价格从价格加入产品price.id = products.id group by price.id order by Totalprices desc limit 1

希望它对你有所帮助


0
投票

假设最新的价格是最近创建的价格并由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
© www.soinside.com 2019 - 2024. All rights reserved.