首页 > 解决方案 > 如何使用 SQL 获取上一个日期的列数?

问题描述

我有下表,

id    status   price      date
2    complete   10    2020-01-01 10:10:10
2    complete   20    2020-02-02 10:10:10
2    complete   10    2020-03-03 10:10:10
3    complete   10    2020-04-04 10:10:10
4    complete   10    2020-05-05 10:10:10

所需的输出,

id  status_count   price   ratio
2        0          0        0
2        1         10        0
2        2         30       0.33

我正在寻找添加上一行的价格。第 1 行是 0,因为它没有前一行值。查找比率即 10/30=0.33

标签: sqlwindow-functions

解决方案


您可以使用分析功能ROW_NUMBERSUM如下所示:

SELECT
    id,
    ROW_NUMBER() OVER (PARTITION BY id ORDER BY date) - 1 AS status_count,
    COALESCE(SUM(price) OVER (PARTITION BY id ORDER BY date), 0) - price as price
FROM yourTable;

DB<>小提琴演示


推荐阅读