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 CountFROM 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(*) cntFROM (
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