我有一个SQL表,我需要计算0营业额的行数,但挑战是他们重置。我只需要自上次产生任何营业额以来的连续行数。
源数据(它有很多不同的ID,在本例中仅使用442和4500):
ID |Date | T/O |
442 |2019-12-31 | 0 |
442 |2020-01-01 |200.00|
442 |2020-01-02 | 0 |
442 |2020-02-06 | 0 |
442 |2020-02-07 | 0 |
442 |2020-02-08 | 0 |
442 |2020-02-09 |150.00|
442 |2020-02-10 | 0 |
442 |2020-02-11 | 0 |
442 |2020-02-15 | 0 |
4500 |2020-01-01 | 0 |
预期结果:
442 | 3 |
4500 | 1 |
我曾想过使用LAG(),但是两次交易之间的行数可能会有很大的不同,有时甚至会超过30行。
2条答案
按热度按时间5vf7fwbs1#
演示
eivgtgni2#
首先,我们可以获取每个id的最后一个非零日期。
这将不会显示4500的值,因为它缺少非零值。
然后,我们可以使用它来选择和分组那些日期之后的值,或者如果id没有非零日期,则选择和分组所有行。
Demonstration.