我有一张桌子可以生成许多SKU的每日更改。 它还增加0,因为报告需要它们。
然后我有一个如下所示的查询:
SELECT t1.Date, t1.[Part SKU], t1.[SKU Name], t1.[Inventory Change], (SELECT SUM(t2.[Inventory Change])
FROM [Inventory Report Table] t2
WHERE t1.[Date] >= t2.[Date]
AND t1.[Part SKU] = [t2.Part SKU]) AS [Inventory Level]
FROM [Inventory Report Table] AS t1
ORDER BY t1.Date, t1.[Part SKU];
此查询的基本操作是它根据零件SKU汇总所有记录,其中日期> =该SKU的日期。
问题是,这需要太长时间。 我一直试图为此找到解决方法......
但我被困了
答案 0 :(得分:2)
这是您的查询:
SELECT t1.Date, t1.[Part SKU], t1.[SKU Name], t1.[Inventory Change],
(SELECT SUM(t2.[Inventory Change])
FROM [Inventory Report Table] t2
WHERE t1.[Date] >= t2.[Date] AND t1.[Part SKU] = [t2.Part SKU]
) AS [Inventory Level]
FROM [Inventory Report Table] AS t1
ORDER BY t1.Date, t1.[Part SKU];
为了提高性能,我会尝试以下两个索引:[Inventory Report Table](Date, [Part SKU])
和[Inventory Report Table]([Part SKU], Date)
。是的,两者都是可取的,一个用于子查询,一个用于外部查询。
这可能会有所帮助。但是,您真正需要累积和功能。您可以考虑升级到提供此功能的SQL Server或Postgres等数据库。
答案 1 :(得分:0)
可以是:
SELECT t1.DATE
,t1.[Part SKU]
,t1.[SKU Name]
,t1.[Inventory Change]
,SUM(t2.[Inventory Change]) AS [Inventory Level]
FROM [Inventory Report Table] AS t1
left join [Inventory Report Table] t2
on t1.[Part SKU] = [t2.Part SKU]
WHERE t1.[Date] >= t2.[Date]
group by t1.DATE
,t1.[Part SKU]
,t1.[SKU Name]
,t1.[Inventory Change]
ORDER BY t1.DATE
,t1.[Part SKU];
PS:我还没有测试查询,这只是一个想法。