0

更新された製品のリストを取得しようとしています。テーブルには、価格の変更が記録されているため、製品の複数の更新が含まれています。

すべての製品の最新の価格変更を取得する必要がありますが、最後の更新のみを返します。これまでのところ以下のコードがありますが、最後の更新と 1 つの製品のみが返されます。

SELECT dbo.twProducts.title, dbo.LowestPrices.productAsin, dbo.twProducts.sku, 
       dbo.LowestPrices.tweAmzPrice, dbo.LowestPrices.price, dbo.LowestPrices.priceDate
FROM   dbo.aboProducts INNER JOIN
       dbo.LowestPrices ON dbo.aboProducts.asin = dbo.LowestPrices.productAsin 
       INNER JOIN dbo.twProducts ON dbo.aboProducts.sku = dbo.twProducts.sku
WHERE  (dbo.LowestPrices.priceDate =
        (SELECT MAX(priceDate) AS Expr1
         FROM   dbo.LowestPrices AS LowestPrices_1))

これが理にかなっていることを願っていますが、理解しやすい方法で説明したかどうかはわかりません.

ご不明な点がございましたら、お気軽にお問い合わせください。

4

2 に答える 2

1

最も簡単なのは、CTEwithROW_NUMBER関数を使用することです。

WITH CTE AS
(
  SELECT dbo.twProducts.title, dbo.LowestPrices.productAsin, dbo.twProducts.sku, 
       dbo.LowestPrices.tweAmzPrice, dbo.LowestPrices.price, dbo.LowestPrices.priceDate,
       RN = ROW_NUMBER()OVER( PARTITION BY productAsin ORDER BY priceDate DESC)
  FROM   dbo.aboProducts INNER JOIN
       dbo.LowestPrices ON dbo.aboProducts.asin = dbo.LowestPrices.productAsin 
       INNER JOIN dbo.twProducts ON dbo.aboProducts.sku = dbo.twProducts.sku
)
SELECT * FROM CTE WHERE RN = 1
于 2012-08-30T14:00:04.123 に答える
0

探しているクエリへの調整は、日付で一致するだけでなく、サブクエリに参加することだと思います。

SELECT dbo.twProducts.title, dbo.LowestPrices.productAsin, dbo.twProducts.sku, 
       dbo.LowestPrices.tweAmzPrice, dbo.LowestPrices.price, dbo.LowestPrices.priceDate
FROM   dbo.aboProducts INNER JOIN
       dbo.LowestPrices ON dbo.aboProducts.asin = dbo.LowestPrices.productAsin 
       INNER JOIN dbo.twProducts ON dbo.aboProducts.sku = dbo.twProducts.sku
WHERE  dbo.LowestPrices.priceDate IN
        (SELECT MAX(LowestPrices_1.priceDate)
         FROM   dbo.LowestPrices AS LowestPrices_1 
         WHERE dbo.LowestPrices.productAsin = LowestPrices_1.productAsin)

これは、各製品の max(priceDate) で一致します

于 2012-08-30T14:35:41.743 に答える