ここで機能するSQL Server 2012でクエリを作成しようとしましたが、成功しませんでした。
次のような tblProducts があり、約 100000 行あります。
SKU, Title, CategoryID
155, 'Product a', 5
176, 'Product b', 5
630, 'Product 1', 10
tblPrices は次のようになり、約 100 万行あり、それぞれが特定の時点での商品の価格と在庫を記録します。
SKU, Price, StockCount, TimeStamp (smalldatetime)
155, 10, 5, 2012-12-31 23:40:00
155, 9, 6, 2012-12-30 23:40:00
155, 7, 6, 2012-12-29 21:40:00
176, 0.50, 0, 2012-12-31 23:40:00
基本的に、カテゴリ 5 にあり、現在の価格が 3 を超える SKU のリストを取得したいと考えています。
これまでのところ、私は持っています:
SELECT *
FROM tblPrices
WHERE Timestamp IN (
SELECT MAX(TimeStamp)
FROM tblPrices
GROUP BY SKU
これにより、tblPrices で各 SKU の現在/最新の価格が得られます。
SKU, Price, StockCount, TimeStamp
155, 10, 5, 2012-12-31 23:40:00
176, 0.50, 0, 2012-12-31 23:40:00
しかし、本当に必要なのは、このテーブルを価格でフィルター処理し、tblProducts に結合してから、カテゴリでフィルター処理することです。ただし、どのように試しても、SKU ごとに複数の行が返されるか、価格条件が無視されます。以下は複数の SKU を返します (したがって、最新の価格のポイントが 3 より大きい必要があります)。また、実行して 810 行を返すのに約 2 分かかり、そのうちの約 4 分の 1 が一意です。
SELECT tblProducts.SKU , CategoryID
FROM tblProducts,
(SELECT EAN, Price
FROM tblPrices
WHERE Timestamp IN (
SELECT MAX(TimeStamp)
FROM tblPrices
GROUP BY SKU
)) a
WHERE tblProducts.EAN = a.EAN AND tblProducts.CategoryID=5 AND a.Price > 3
一人ではどうにもならないので、助けていただけると本当にありがたいです。