我一直在尝试在 SQL Server 2012 中编写一个在这里工作的查询,但没有成功。
我有 tblProducts 看起来像这样并且有大约 100000 行:
SKU, Title, CategoryID
155, 'Product a', 5
176, 'Product b', 5
630, 'Product 1', 10
和 tblPrices 看起来像这样,大约有一百万行,每行记录特定时间项目的价格和库存:
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),并且还需要大约 2 分钟来执行并返回 810 行,其中大约四分之一是唯一的:
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
我将非常感谢任何帮助,因为我自己无处可去。