[英]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.