GROUP BY用于SQL中的连续行

给出下表:

**身份证状态日期**

12 1 2009-07-16 10:00

45 **2** 2009-07-16 13:00

67 **2** 2009-07-16 14:40

77 1 2009-07-16 15:00

89 1 2009-07-16 15:30

99 1 2009-07-16 16:00

问题:

SELECT MIN(ID) AS ID, State, MIN(Date) AS Date, COUNT(ID) AS Count

FROM table GROUP BY State

结果如下:

**ID状态日期计数**

12 1 2009-07-16 10:00 4

45 2 2009-07-16 13:00 2

**ID状态日期计数**

12 1 2009-07-16 10:00 1

45 2 2009-07-16 13:00 2

77 1 2009-07-16 15:00 3

SQL中这可能吗?到目前为止,我还没有找到解决方案…

回答:

SELECT  MIN(id) AS id, MIN(ts) AS ts, MIN(state) AS state, COUNT(*) cnt

FROM (

SELECT @r := @r + (@state != state) AS gn,

@state := state AS sn,

s.*

FROM (

SELECT @r := 0,

@state := 0

) vars,

t_state s

ORDER BY

ts

) q

GROUP BY

gn

用于测试的表创建脚本:

CREATE TABLE t_state (id INT NOT NULL PRIMARY KEY, state INT NOT NULL, ts DATETIME NOT NULL);

INSERT

INTO t_state

VALUES

(12, 1, '2009-07-16 10:00'),

(45, 2, '2009-07-16 13:00'),

(67, 2, '2009-07-16 14:40'),

(77, 1, '2009-07-16 15:00'),

(89, 1, '2009-07-16 15:30'),

(99, 1, '2009-07-16 16:00');

以上是 GROUP BY用于SQL中的连续行 的全部内容, 来源链接: utcz.com/qa/412705.html

回到顶部