Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用SQL高效地获取以前的值_Sql_Ms Access_Ms Access 2010 - Fatal编程技术网

使用SQL高效地获取以前的值

使用SQL高效地获取以前的值,sql,ms-access,ms-access-2010,Sql,Ms Access,Ms Access 2010,由于我正在处理一个相当大的数据集,因此我正在寻找一种更有效的方法,根据日期序列获取以前的值。我目前正在为每个值使用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.2

由于我正在处理一个相当大的数据集,因此我正在寻找一种更有效的方法,根据日期序列获取以前的值。我目前正在为每个值使用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
输出是正确的,但我非常感谢在两件事上的输入

1有没有办法更有效地计算上一个日期和值?我正在使用Microsoft Access 2010

2如何将TodaysPrice和PrevPrice之间的价格差异直接合并到SQL代码中

提前感谢您的建议和意见

您可以使用子查询

SELECT   TodaysDate, TodaysObject, TodaysPrice, TodaysVolume, Today.PrevDate,
    prev.Price  as PrevPrice, prev.Volume as PrevVolume
FROM (
    SELECT  TDate AS TodaysDate, Object as TodaysObject, Price AS TodaysPrice, Volume AS   TodaysVolume,
        Table1.Object, ( SELECT MAX(P2.TDate)
                              FROM Table1 AS P2
                              WHERE P2.Object = Table1.Object
                                AND P2.TDate < Table1.TDate ) As PrevDate
    FROM Table1) Today
    LEFT JOIN Table1 as Prev ON Today.TodaysObject= Prev.Object AND Today.PrevDate = Prev.TDate

PrevDate是否总是比今天早一个月?否-不幸的是,日期中没有模式。PrevDate是对象在表中列出的前一天,即,如果超过一个周末,前一天将是最后一个星期五谢谢您的输入!您提供的代码无法正常工作,但我将尝试找出为什么在子查询的对象字段中添加别名,例如,选择TDate作为TodaysDate,选择Object作为TodaySObject,选择Price作为TodaysPrice。。。
SELECT   TodaysDate, TodaysObject, TodaysPrice, TodaysVolume, Today.PrevDate,
    prev.Price  as PrevPrice, prev.Volume as PrevVolume
FROM (
    SELECT  TDate AS TodaysDate, Object as TodaysObject, Price AS TodaysPrice, Volume AS   TodaysVolume,
        Table1.Object, ( SELECT MAX(P2.TDate)
                              FROM Table1 AS P2
                              WHERE P2.Object = Table1.Object
                                AND P2.TDate < Table1.TDate ) As PrevDate
    FROM Table1) Today
    LEFT JOIN Table1 as Prev ON Today.TodaysObject= Prev.Object AND Today.PrevDate = Prev.TDate