簡體   English   中英

將最新記錄與表格合並

[英]Combine latest records with table

我正在使用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中存在未在product映射的產品ID,請使用left join代替inner join

我認為您已獲得商品名稱的最高總價,因此以下是根據給定表查詢的價格

選擇prices.id,products.id,products.product,sum(prices.prices)作為價格中的Totalprices,將prices.id = products.id上的產品與prices.id分組,按prices.id分組,按Totalprices desc限制1

希望對你有幫助

假設最新價格是最近創建的價格,並由prices.created_at值描述, 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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM