我有一个包含三列年份、品牌、金额的表,我想要一个查询来返回其金额每年都在增加的品牌记录。
我已将示例输入数据和预期输出数据粘贴在下面。
表格格式:
年_v | 品牌 | 金额 |
---|---|---|
2018 | 宝洁 | 50000 |
2019 | 宝洁 | 45000 |
2020 | 宝洁 | 60000 |
2018 | IBM | 55000 |
2019 | IBM | 60000 |
2020 | IBM | 70000 |
2018 | 艾 | 80000 |
2019 | 艾 | 40000 |
2020 | 艾 | 36000 |
预期输出:
年_v | 品牌 | 金额 |
---|---|---|
2018 | IBM | 55000 |
2019 | IBM | 60000 |
2020 | IBM | 70000 |
IBM的金额每年都在增加
SELECT *
FROM brands
WHERE brand IN (SELECT brand
FROM (SELECT brand, (amount - LAG(amount, 1, 0) OVER (PARTITION BY brand ORDER BY year_v)) diff
FROM brands) t
GROUP BY brand
HAVING MIN(diff) > 0);
lag(): LAG (标量表达式 [,偏移] [,默认]) OVER ( [ 分区依据子句] 订单依据子句)
可能有重构此查询的空间,但我会将其留给OP来决定。