假设有以下数据表t1:
group | date | value |
---|---|---|
A | 2021-01-01 | 10 |
A | 2021-01-02 | 15 |
B | 2021-01-01 | 20 |
B | 2021-01-02 | 25 |
要在每个组内,按日期从小到大排序,并计算每个日期的差值(当前行值—前面一行值),但是要求只计算value列大于等于10的行。则可以使用以下SQL语句:
SELECT
t1.group, t1.date, t1.value,
t1.value - COALESCE(
LAG(CASE WHEN t1.value >= 10 THEN t1.value END) OVER (PARTITION BY t1.group ORDER BY t1.date), 0
) AS diff
FROM
t1
WHERE
t1.value >= 10
ORDER BY
t1.group, t1.date
执行上述代码后,会得到以下结果:
group | date | value | diff |
---|---|---|---|
A | 2021-01-01 | 10 | 0 |
A | 2021-01-02 | 15 | 5 |
B | 2021-01-01 | 20 | 0 |
B | 2021-01-02 | 25 | 5 |
可以看到,我们成功地按组计算了差值,并且对每个组内的value>=10的行做了限制。