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