sql里面按照某一列求历史累计最大值rows BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW

文章目录

      • 1. rows BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW

1. rows BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW

目的:计算vintage的时候采用截止到当前期次的历史最大逾期天数来算坏样本占比

CREATE TABLE overdue_repayments (
  apply_id INT,
  period_num INT,
  overdue_days INT
);


表中有三列:apply_id表示人维度,period_num表示还款期次编号,overdue_days表示逾期天数。
以下是一个Hive SQL查询示例,它将计算每个mob值的累计最大逾期天数:

SELECT
  apply_id,
  period_num,
  overdue_days,
  MAX(overdue_days) OVER (PARTITION BY apply_id ORDER BY period_num ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS accumulated_max_overdue_days
FROM
  overdue_repayments
ORDER BY
  apply_id,
  period_num;

这个查询的解释如下:
apply_id和period_num是表中的两列,分别表示人的进件单号和期次编号。
overdue_days是逾期天数列。
窗口函数MAX(overdue_days)计算每个mob值的累计最大逾期天数。

PARTITION BY apply_id确保窗口函数在相同的人的单号分组内操作。
ORDER BY period_num确保按照期次顺序处理数据。
ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW意味着窗口函数将从当前行的前面一直累积到当前行。

你可能感兴趣的:(SQL,sql,数据库)