3

製品の最新の原価計算日と最小原価で最終原価を取得したいと考えています。

以下のクエリを使用すると、各列の最大日付と最小コストが表示されます。以下のスクリーンショットをご覧ください。

SELECT MAX(CostingDate) AS LatestDate,
MIN(Cost) AS MinPrice,
OutletCode,
ProductID  
FROM AccountsCosting
WHERE OutletCode = 'C&T01'
GROUP BY OutletCode, ProductID

結果:

ここに画像の説明を入力

例 - productID の場合:200006

SELECT * FROM AccountsCosting
WHERE ProductID = 200006 AND OutletCode = 'C&T01'
ORDER BY CostingDate DESC

ここに画像の説明を入力

私が欲しいのは、最小コストの最後の原価計算日です (赤色で強調表示された日付)。購入日が同じ2013-03-20であっても、最小コストを返す必要があります。

ここに画像の説明を入力

クエリを編集して結果を取得するにはどうすればよいですか? どんな助けでも大歓迎です!

4

5 に答える 5

4

最初に最新の日付を取得する必要があります。次に、それらの最小コストを見つけることができます。例えば

 select 
    a.OutletCode, 
    a.ProductID,
     LatestDate,
    MIN(Cost) AS MinPrice

from

    (
    SELECT MAX(CostingDate) AS LatestDate,
    OutletCode,
    ProductID  
    FROM AccountsCosting
    WHERE OutletCode = 'C&T01'
    GROUP BY OutletCode, ProductID
    ) a
    left join 
    FROM AccountsCosting b
    on
    a.OutletCode=b.OutletCode
    and a.ProductID=b.ProductID  
    and a.LatestDate=b.CostingDate

    group by a.OutletCode, a.ProductID, LatestDate
于 2013-08-13T10:30:52.593 に答える
1

私があなたを正しく理解していれば、最新の日付の最小コストが必要ですか?!

これを試して:

SELECT CostingDate AS LatestDate,
Cost AS MinPrice,
OutletCode,
ProductID  
FROM AccountsCosting
WHERE OutletCode = 'C&T01'
and CostingDate in (SELECT MAX(CostingDate) as CostingDate FROM AccountsCosting WHERE OutletCode = 'C&T01')
and Cost in (SELECT MIN(Cost) as Cost FROM AccountsCosting WHERE OutletCode = 'C&T01' and CostingDate in (SELECT MAX(CostingDate) as CostingDate FROM AccountsCosting WHERE OutletCode = 'C&T01'))
GROUP BY OutletCode, ProductID;
于 2013-08-13T10:29:12.303 に答える
1

MAXとMINに対して2つのクエリを実行し、それらを結合して単一の行を取得する必要があると思います。たとえば、一時テーブルまたはCTEのいずれかを使用します

WITH CTE_Max AS
(SELECT MAX(costingDate) as latestDate,
 Oultletcode,
ProductID
FROM AccountsCosting
GROUP BY OutletCode, ProductID),

CTE_Min AS
(SELECT MIN(cost) as MinPrice,
Oultletcode,
ProductID
FROM AccountsCosting
GROUP BY OutletCode, ProductID)

SELECT * FROM CTE_Max 
JOIN CTE_Min
ON CTE_Max.outletCode=CTE_Min.outletCode
AND CTE_Max.productID=CTE_Min.productID
于 2013-08-13T10:32:07.603 に答える
1

使用中およびSQL Server 2005使用後CTERANK() OVER()

;WITH AccountCostingForOutletCode AS  (
    SELECT OutletCode, ProductID, CostingDate, Cost, 
       RANK() OVER( PARTITION BY OutletCode, ProductID ORDER BY Cost, CostingDate DESC) AS Rnk
    FROM AccountsCosting
    WHERE OutletCode = 'C&T01'
)
SELECT TOP 1 OutletCode, ProductID, CostingDate, Cost, Rnk
FROM AccountCostingForOutletCode
ORDER BY Rnk
于 2013-08-13T10:43:13.040 に答える