Sql ms access查询以前的值

Sql ms access查询以前的值,sql,ms-access,Sql,Ms Access,是否可以改进此MS Access查询 i、 e.重复从表2中选择顶部1列 如果表2中curindex之前有一个索引, 查询返回表2中col的上一个值 否则,将从表3返回与id匹配的列的值 i、 e 如果curindex=7,则返回表2中的值=221 如果curindex=5,则返回表3中的值=200 Table2 Table3 id index col id col 1 1

是否可以改进此MS Access查询

i、 e.重复从表2中选择顶部1列

如果表2中curindex之前有一个索引, 查询返回表2中col的上一个值

否则,将从表3返回与id匹配的列的值

i、 e

如果curindex=7,则返回表2中的值=221

如果curindex=5,则返回表3中的值=200

Table2                               Table3
id index  col                        id    col
1    1    110                        1     100
1    2    120                        2     200
1    3    130                        3     300
1    4    140
2    5    211
2    6    221
2    7    231

PARAMETERS [curindex] Short;
SELECT TOP 1
  IIF (
    ( SELECT TOP 1 col
      FROM Table2
      WHERE index < [curindex]
       AND id =
        ( SELECT id
           FROM Table2
           WHERE index = [curindex])
    ) ,
        ( SELECT TOP 1 col
          FROM Table2
          WHERE index < [curindex]
            AND id =
            ( SELECT id
              FROM Table2
              WHERE index = [curindex])
          ORDER BY index DESC
        ),
        ( SELECT TOP 1 col
          FROM Table3
          WHERE id = 
           ( SELECT id
             FROM Table2
             WHERE index = [curindex])
        )
     ) AS col
FROM Table2
ORDER BY index

您可以通过减少结果查询来限制iff条件的开销

SELECT TOP 1
  IIF (
( SELECT TOP 1 col
  FROM Table2
  WHERE index < [curindex]
   AND id =
    ( SELECT id
       FROM Table2
       WHERE index = [curindex])
) ,
    ( SELECT TOP 1 col
      FROM Table2
      WHERE index = [curindex])
    ),
    ( SELECT TOP 1 col
      FROM Table3
      WHERE id = 
       ( SELECT id
         FROM Table2
         WHERE index = [curindex])
    )
 ) AS col
FROM Table2
ORDER BY index