3

我正在寻找等同于 MS Access 中的以下 Oracle 查询。我知道 Lag Over (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
4

2 回答 2

4

Oracle 示例工作并考虑您的查询,您可能会发现一个适合的子查询。如果没有,用户定义的函数将是可能的。

这将按 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。

于 2012-08-23T08:54:53.877 回答
0

像这样的东西:

SELECT p4.*, p5.qty AS qtyNext
FROM (
SELECT p1.ID, p1.qty,
(SELECT MAX(p3.price) FROM myTbl p3 WHERE p3.price < p1.price) AS prev_price, 
p1.price AS current_rec, 
(SELECT MIN(p2.price) FROM myTbl p2 WHERE p2.price > p1.price) AS next_price
FROM myTbl AS p1 
) AS p4
INNER JOIN myTbl AS p5 
ON p4.next_price=p5.price;

但是看看这样的输出表示是否适合你( - 如果价格有重复 - 所有记录似乎都可以输出)......

于 2021-10-10T07:06:23.220 回答