我在MS Access中寻找等效的以下Oracle查询。我知道Lagover(Partition by)功能在MS Access中不可用,但希望使用MS Access实现以下查询的相同功能..感谢任何输入
select t.*,
to_char(date1,'yyyymm') month,
lag(value1,1,0) over(partition by Id1,name1,office,product,overall order by date1) prev_val
from test_prev t
order by name1,
office,
overall,
date1,
product
答案 0 :(得分:4)
在Oracle example工作并考虑您的查询,您可能会发现子查询适合。如果没有,可能会有用户定义函数。
这将按product_id
返回上一个订单日期SELECT Orders.ORDER_DATE,
Orders.PRODUCT_ID,
Orders.QTY,
(SELECT Top 1 o.Order_Date
FROM Orders o
WHERE o.Order_Date<Orders.Order_Date
AND o.Product_ID=Orders.Product_ID
ORDER BY o.Order_Date DESC) AS PreviousOrder
FROM Orders
ORDER BY Orders.ORDER_DATE, Orders.PRODUCT_ID
在示例数据中,每个product_id对于每个订单都有不同的日期,因此仅具有ORDER BY日期的子查询就足够了,但是,Access中的Top查询返回匹配,因此如果有可能重复,则最好订购由相关领域和唯一的id。