繁体   English   中英

计算数据中的上一个日期

[英]Calculate previous date present in data

下面给出的是我需要计算先前交易日期列的数据集

Client  Account No  Trade Date  Amount  Previous Transaction Date
A        1          1/1/2016    10        -
A        2          1/2/2015    20        -
A        3          1/3/2015    30        -
A        1          1/4/2017    40        1/1/2016
A        2          1/5/2017    50        1/2/2015
B        1          1/6/2017    60        -
A        2          1/7/2017    70        1/5/2017

当我拥有大量数据时,如何以最有效的方式完成它。 需要在Oracle SQl中完成

这是lag窗口功能的直接应用。

select t.*
,lag(trade_date) over(partition by client,account_no order by trade_date) as prev_txn_date
from tbl t

另一种方法是创建一个函数并在查询中使用它,请参见下面的示例代码,

CREATE FUNCTION get_previous_transaction_date (p_client VARCHAR2, p_account_no VARCHAR2, p_trade_date DATE) RETURN DATE
IS
    v_prev_date DATE;
BEGIN
    SELECT MAX(trade_date)
      INTO v_prev_date
      FROM your_table
     WHERE client = p_client
       AND account_no = p_account_no
       AND trade_date < p_trade_date;
    RETURN v_prev_date;
END;
/

SELECT client, account_no, trade_date, amount, get_previous_transaction_date(client, account_no, trade_date)
  FROM your_table;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM