2013-12-09 69 views
0

正如標題所說,我試圖編寫一個顯示客戶ID,公司名稱和第一個訂單日期(列出的最早日期)的查詢。我嘗試了前1名,但沒有奏效。使用SQL Server 2012.查詢列表公司名稱和第一個訂單日期

Select c.CustomerID, CompanyName, top 1 o.OrderDate as 'first order date' 
from Customers c join Orders o on 
c.CustomerID = o.CustomerID 
order by c.CustomerID 

任何建議或幫助將不勝感激!

回答

4
select c.CustomerID, CompanyName, MIN(o.OrderDate) as 'first order date' 
from 
    Customers c 
    join Orders o on c.CustomerID = o.CustomerID 
group by c.CustomerID, CompanyName 
order by c.CustomerID 
1

該解決方案更加靈活,因爲它可以讓你從Customers表中添加任何列,而無需將它們添加到GROUP BY

;WITH x AS 
(
    SELECT CustomerID, OrderDate = MIN(OrderDate) 
    FROM dbo.Orders GROUP BY CustomerID 
) 
SELECT c.CustomerID, c.CompanyName, x.OrderDate 
    FROM dbo.Customers AS c 
    INNER JOIN x ON c.CustomerID = x.CustomerID 
    ORDER BY c.CustomerID; 

如果你想從第一階等欄目也可以這樣做,您可以這樣做,在使用GROUP BY時無法添加,例如,最便宜或最貴的訂單不一定與第一個訂單對應:

;WITH x AS 
(
    SELECT CustomerID, OrderDate, TotalAmount, /* ...other columns... */ 
    rn = ROW_NUMBER() OVER (PARTITION BY CustomerID ORDER BY OrderDate) 
    FROM dbo.Orders GROUP BY CustomerID 
) 
SELECT c.CustomerID, c.CompanyName, x.OrderDate, x.TotalAmount /* ...others... */ 
    FROM dbo.Customers AS c 
    INNER JOIN x ON c.CustomerID = x.CustomerID 
    WHERE x.rn = 1 
    ORDER BY c.CustomerID; 
相關問題