我正在撰寫一個SQL查詢,以便從3個以上的表中獲取資料,但為了簡化問題,我在這里使用了一個有3個表的類似場景。
Table1 Customer (PK-CustomerID, Name)
Table2 銷售(FK-Id, SalePrice)
| ID | 銷售價格 |
|---|---|
| 1 |
Table3 訂單(PK-Id, FK-CustomerID, Date, Amount)
| Id | 客戶ID | 日期金額101 | 1 | 25-09-2021 | 30.0 | 1 | 27-09-2021 |
|---|
2
在輸出中,日期和金額應該是最近的訂單(最新的日期),對于一個客戶
。我的方法是
Select c.CustomerID, c.Name, s.SalePrice, RecentOrder.Date, RecentOrder.Amount from
客戶 as c
LEFT JOIN Sales s ON c.CustomerID = s.ID
LEFT JOIN (SELECT top 1 o.Date, o.Amount, o.CustomerID
FROM Order o, Customer c1 WHERE c1. CustomerID = o.CustomerID Order by o.Date DESC)
RecentOrder ON c.CustomerID = RecentOrder.CustomerID
輸出我得到
CustomerID, Name, SalePrice, Date, Amount
| 客戶ID | 姓名銷售價格日期金額 |
|---|---|
| 1 | John |
我得到的輸出包括所有訂單中的最近的訂單。但我想從該客戶的訂單中獲得最近的訂單
。輸出需要
CustomerID, Name, SalePrice, Date, Amount
| 客戶ID | 姓名銷售價格日期金額 |
|---|---|
| 1 | John |
uj5u.com熱心網友回復:
你需要對每個客戶的訂單進行預先匯總或識別最近的訂單,你的查詢是為所有訂單選擇1行。
試試下面的方法(未經測驗!)
select c.CustomerID, c.Name, s.SalePrice, o.Date, o.Amount
from Customer c
left join Sales s on c.CustomerID = s.ID
outer apply (
select top (1) date, amount
from [order] o
where o.CustomerId=c.CustomerId
order by Id desc
)o
uj5u.com熱心網友回復:
在左連接中不使用子查詢,你可以用外層應用來檢查。
檢查的方式如下
Select c.CustomerID, c.Name, s.SalePrice, RecentOrder.Date, RecentOrder.Amount
from Customer c
LEFT JOIN Sales s ON c.CustomerID = s.ID
OUTER APPLY (
SELECT top 1 o.Date, o.Amount, o.CustomerID
FROM [Order] o.
WHERE o.CustomerID = c.CustomerID ORDER BY o.DateDESC) 最近的訂單`。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/307264.html
標籤:
