AdventureWorks2014 dbを使用して、次のデータを選択します。顧客ごとに、すべての注文を最初の注文から12か月以内に取得したいと考えています。私はその解決策に終わった:SQLグループ化データ
WITH dates AS
(
SELECT soh.CustomerID
,MIN(soh.OrderDate) AS MinOrderDate
,DATEADD(MONTH, 12, MIN(soh.OrderDate)) as MaxOrderDate
FROM Sales.SalesOrderHeader soh
JOIN Sales.SalesOrderDetail sod ON sod.SalesOrderID=soh.SalesOrderID
GROUP BY soh.CustomerID
)
SELECT soh.CustomerID
,soh.OrderDate
,sod.ProductID
FROM Sales.SalesOrderHeader soh
JOIN Sales.SalesOrderDetail sod ON sod.SalesOrderID=soh.SalesOrderID
JOIN dates on dates.CustomerID=soh.CustomerID
WHERE soh.OrderDate BETWEEN MinOrderDate AND MaxOrderDate
ORDER BY soh.CustomerID
これが正しいかどうかわからないのですか?そして、もっと簡単なソリューションが存在するかどうか疑問に思っています。
「soh。*」と「sod。*」は機能しません。カラム名を指定する必要があります。とにかく答えに感謝しています。それは私が知らなかったことです。:) – katta
@katta soh。*とsod。*は少なくとも1つの列名を共有しているためSalesOrderIdは動作しませんでしたが、共通の列名テーブルの間で動作します。 – Matt
OK、ありがとう! – katta