【发布时间】:2017-10-27 06:07:39
【问题描述】:
由于我正在处理一个相当大的数据集,因此我正在寻找一种更有效的方法来根据日期序列获取先前的值。我目前正在为每个值使用 SELECT TOP 1 子查询,但是每次运行查询都会花费大量时间
样本数据:
TDate Object Price Volume
18.05.2017 ObjectA 105 10
18.05.2017 ObjectB 110 10
18.05.2017 ObjectC 120 10
19.05.2017 ObjectA 100 12
19.05.2017 ObjectB 75 10
19.05.2017 ObjectD 33 10
22.05.2017 ObjectA 105 15
22.05.2017 ObjectB 80 10
22.05.2017 ObjectD 55 10
我的代码:
SELECT TDate AS TodaysDate, Object, Price AS TodaysPrice, Volume AS TodaysVolume,
( SELECT TOP 1 TDate
FROM Table1 AS P2
WHERE P2.Object = Table1.Object
AND P2.TDate < Table1.TDate
ORDER BY P2.TDate DESC ) As prevDate,
( SELECT TOP 1 Price
FROM Table1 AS P2
WHERE P2.Object = Table1.Object
AND P2.TDate < Table1.TDate
ORDER BY P2.TDate DESC ) As prevPrice,
( SELECT TOP 1 Volume
FROM Table1 AS P2
WHERE P2.Object = Table1.Object
AND P2.TDate < Table1.TDate
ORDER BY P2.TDate DESC ) As PrevVolume
FROM Table1
输出:
TodaysDate Object TodaysPrice TodaysVolume prevDate prevPrice PrevVolume
18.05.2017 ObjectA 105 10
18.05.2017 ObjectB 110 10
18.05.2017 ObjectC 120 10
19.05.2017 ObjectA 100 12 18.05.2017 105 10
19.05.2017 ObjectB 75 10 18.05.2017 110 10
19.05.2017 ObjectD 33 10
22.05.2017 ObjectA 105 15 19.05.2017 100 12
22.05.2017 ObjectB 80 10 19.05.2017 75 10
22.05.2017 ObjectD 55 10 19.05.2017 33 10
输出是正确的,但我非常感谢您在两件事上的输入;
1) 有什么方法可以更有效地计算上一个日期和值? (我使用的是 Microsoft Access 2010)
2) 如何将 TodaysPrice 和 PrevPrice 之间的价格差异直接包含在 SQL 代码中?
提前感谢您的任何建议和意见!
【问题讨论】:
-
PrevDate 总是比 TodaysDate 早一个月吗?
-
否 - 不幸的是,日期中没有模式。 PrevDate 是对象在表中列出的上一个日期(即如果它在周末,则前一天将是上周五)
标签: sql ms-access ms-access-2010