这个问题的棘手版本:SQL-添加从条件开始的顺序计数器列 https://stackoverflow.com/questions/57897292/sql-add-sequential-counter-column-starting-at-condition
我有一张桌子:
create table t (id int, category varchar(4), time1 datetime, market varchar(100));
insert into t (id,category,time1, market) values
(1000, 'cat1', '20120618 10:14:09 AM', 'mkt1'),
(1002, 'cat1', '20120618 10:14:11 AM', 'mkt2'),
(1001, 'cat2', '20120618 10:14:14 AM', 'mkt1'),
(1004, 'cat2', '20120618 10:14:15 AM', 'special'),
(1003, 'cat2', '20120618 10:14:17 AM', 'mkt2'),
(1006, 'cat1', '20120618 10:14:54 AM', 'special'),
(1007, 'cat3', '20120618 10:14:55 AM', 'special'),
(1054, 'cat1', '20120618 10:14:58 AM', 'mkt1'),
(1023, 'cat1', '20120618 10:14:59 AM', 'mkt2'),
(1008, 'cat4', '20120618 10:24:09 AM', 'mkt1'),
(1028, 'cat2', '20120618 10:24:10 AM', 'special'),
(1021, 'cat1', '20120618 10:24:29 AM', 'mkt2'),
(1017, 'cat1', '20120618 10:34:49 AM', 'mkt2'),
(1019, 'cat1', '20120618 10:34:57 AM', 'special')
如何从表中选择所有列,同时添加顺序计数器列,一旦触发条件,该计数器列就开始计数(在本例中)market='special'
),分组依据category
并与id
那列不一定是增量的?
结果应该如下所示:
id category time1 market count
1000 cat1 20120618 10:14:09 AM mkt1 0
1002 cat1 20120618 10:14:11 AM mkt2 0
1001 cat2 20120618 10:14:14 AM mkt1 0
1004 cat2 20120618 10:14:15 AM special 1
1003 cat2 20120618 10:14:17 AM mkt2 2
1006 cat1 20120618 10:14:54 AM special 1
1007 cat3 20120618 10:14:55 AM special 1
1054 cat1 20120618 10:14:58 AM mkt1 2
1023 cat1 20120618 10:14:59 AM mkt2 3
1008 cat4 20120618 10:24:09 AM mkt1 0
1028 cat2 20120618 10:24:10 AM special 3
1021 cat1 20120618 10:24:29 AM mkt2 4
1017 cat1 20120618 10:34:49 AM mkt2 5
1019 cat1 20120618 10:34:57 AM special 6