我需要根據 SQL Server 中聯接表中的值選擇不同的行。
表順序:
| order_id | product_id|
|------------|------------|
| 1234 | 11 |
| 1234 | 22 |
| 1234 | 33 |
| 1234 | 44 |
| 1234 | 55 |
| 2222 | 66 |
| 2222 | 77 |
表產品:
| product_id | deliverytime|
|------------|--------------|
| 11 | 2 |
| 22 | 3 |
| 33 | 5 |
| 44 | 2 |
| 55 | 1 |
| 66 | 4 |
| 77 | 1 |
我正在尋找的結果:
| order_id | product_id| deliverytime|
|------------|------------|--------------|
| 1234 | 33 | 5 |
| 2222 | 66 | 4 |
提前致謝
uj5u.com熱心網友回復:
我們可以在 CTE 中按交貨時間 DESC 排名,然后只取最高值的排名 1。
WITH CTE AS
(SELECT
o.product_id,
o.order_id
p.deliverytime,
RANK() OVER (PARTITION BY order_id
ORDER BY deliverytime DESC) rn
FROM Orderline o
JOIN Products p
ON o.product_id = p.product_id )
SELECT
order_id,
product_id,
deliverytime
FROM CTE
WHERE rn = 1;
ORDER BY order_id
uj5u.com熱心網友回復:
也許它應該對你有用,但如果有兩個或更多具有相同highest價值的產品,你會得到每個訂單超過 1 行:
select v.order_id
, p2.product_id
, p2.deliverytime
from (
select o.order_id
, max(p.deliverytime) as max_deliverytime
from Orderlines o
join Products p
on o.product_id = p.product_id
group by o.order_id
) v
join Products p2
on v.max_deliverytime = p2.deliverytime;
uj5u.com熱心網友回復:
交叉申請。
SELECT OL.Order_ID, OL.Product_ID, HDP.DeliveryTime
FROM OrderLines OL
CROSS APPLY (SELECT Top 1 P.Product_ID, P.DeliveryTime
FROM Products P
WHERE P.Product_ID = OL.Product_ID
ORDER BY deliveryTime Desc) HDP --Higest Delivery Time Product
筆記:
- 我們沒有訂購平局,因此如果出現平局,訂單可能在給定訂單行內是“隨機”的。
- 交叉應用為每個加入的訂單行運行一次子查詢。獲得“TOP”記錄。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/448988.html
上一篇:不同的主機(Kubernetes中的Pod)以不同的證書回應相同的主機名
下一篇:第一個子集之后的SQL子集
