我有專案,可以有許多價格。我想要一個結果表,其中有所有專案本身,并且只有特定區域的專案的最新價格。
item
| id | name |
|---|---|
| 1 | 香蕉 |
| 香蕉 | 2 | 蘋果 | 蘋果 |
價格
| id | item_id | 區域價格日期。||||||||
|---|---|---|---|---|---|---|---|---|---|
| 1 | 1 | 美國 | 10 | 10 | 1-1-2021 | 2 | 1 | 美國 | |
| 美國 | 20 | 20 | 2-1-2021 | 3 | 2 | 美國 | |||
| 美國 | 30 | 30 | 1-1-2021 | 4 | 2 | 加拿大 | |||
| 加拿大 | 40 | 40 | 2-1-2021 |
結果(應該看起來像這樣)
| id | name | 地區價格 | 日期。|||||
|---|---|---|---|---|---|---|---|
| 1 | 香蕉 | ||||||
| 美國 | 美國 | 美國 | 20 | 20 | 2-1-2021 | 2 | 蘋果 |
| 蘋果公司 | 美國 | 美國? | 30 | 30 | 1-1-2021 |
我試著這樣做,但是它回傳了兩個表中的所有行。
select *
from item
LEFT JOIN price p on p.item_id = item.id
where p.created_at in (
select max(price.credate)
from 價格
where p.id = price.id
)
and p.region = 'USA'
我不明白我應該怎樣做才能將結果表減少到只有每個專案的最新價格的記錄。
uj5u.com熱心網友回復:
試一下:
SELECT p.id, i.name, p.region, p.price, p.date
FROM price p
INNER JOIN (SELECT item_id。MAX(date) AS date) type">date FROM price GROUP by item_id) t
ON t.item_id = p.item_id AND t.date = p.date
JOIN item i
ON p.item_id = i.id
WHERE p.region= 'USA'
你的代碼不作業的部分原因是,在你的WHERE子句中,你是通過price表中所有記錄的最大日期來過濾的。
uj5u.com熱心網友回復:
這是一個典型的row_number()的用例:
select *
from item i left join
(select p.*,
row_number() over(partition by id order by created_at desc) as seqnum
from price p
where p.region = 'USA'on p.item_id = i.id and seqnum = 1;
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/321952.html
標籤:
上一篇:將逗號分隔的字串與資料庫欄位相匹配,并將結果排序為與逗號分隔字串相同的順序
下一篇:陣列中的通配符查找-VBA
