我有下表,其中的数据如下所示;linenr
s 单调递增但不一定连续;当该key
字段包含一个省略号...
,表示从上面继续的条目时:
create table source (
linenr integer unique not null,
key text not null,
value text );
insert into source values
( 2, 'tags', 'a' ),
( 3, '...', 'b' ),
( 4, 'title', 'The Title' ),
( 5, 'note', 'this is' ),
( 6, '...', 'an EXAMPLE' ),
( 8, 'title', 'over' ),
( 9, '...', 'three' ),
( 10, '...', 'lines' ),
( 11, 'about', 'grouping' );
现在我想要一个视图,其中根据key
字段的内容分配组号;组编号不必是连续的,但对于以除 以外的键开头...
并继续通过 is 的所有行key
的每组行应该是不同的...
,如下所示:
╔════════╤═══════╤═══════╤════════════╗
║ linenr │ group │ key │ value ║
╠════════╪═══════╪═══════╪════════════╣
║ 2 │ 1 │ tags │ a ║
║ 3 │ 1 │ ... │ b ║
║ 4 │ 2 │ title │ The Title ║
║ 5 │ 3 │ note │ this is ║
║ 6 │ 3 │ ... │ an EXAMPLE ║
║ 8 │ 4 │ title │ over ║
║ 9 │ 4 │ ... │ three ║
║ 10 │ 4 │ ... │ lines ║
║ 11 │ 5 │ about │ grouping ║
╚════════╧═══════╧═══════╧════════════╝
我尝试用窗口/分区和 tabibitosan 模式来做这件事,但还没有想出任何有效的方法;此外,在前一行使用 withlag()
对多行连续行 with 没有帮助...
。在电子表格中,这是一件非常容易做到的事情,但在 SQL 中,我似乎无法引用当前查询的前一行,可以吗?
您可以使用一个简单的 CASE 来获取它。
现在 SUM(rst) 忽略空值并执行此操作。
dbfiddle在这里
使用单个窗口函数更便宜、更简单:
dbfiddle在这里
有关的: