按类型分组mysql结果 - 但仅按特定顺序排列

时间:2013-12-23 21:09:22

标签: mysql group-by

背景资料:我正在一个私人pingdom.com克隆工作。

如果网站可用,我有一张状态检查表,当然还有检查日期。他们中的一些人具有状态" ok",一些"不好"。现在我想按状态对行进行分组,但只需要在同一时间#"时间帧"中对行进行分组。

示例:

id   status   timestamp
1    ok       1234
2    ok       1235
3    not ok   1236
4    ok       1237

查询应该制作三个ID为1-2,3和4的组。最后我要显示测试的网站在线2小时,离线1小时,然后再在线1小时。当然我之后可以过滤结果,但我认为这对于大型数据集来说效率非常低。

我完全不知道从哪里开始,因为你不能只按状态分组。对搜索词的简短帮助就足够了,英语不是我的第一语言。

1 个答案:

答案 0 :(得分:1)

尝试此查询:

SELECT min( timestamp ) from_timestamp, 
       max( timestamp ) to_timestamp,
       max( timestamp) - min( timestamp ) + 1 how_long,
       min( id ) from_id,
       max( id ) to_id,
       status
FROM (
    SELECT t.id,
           t.timestamp,
           if(@last_status = status, @group, @group:=@group+1) group_number,
            @last_status := status as status
    FROM table1 t
    CROSS JOIN (
       SELECT @last_status := null, @group:=0
    ) as init_vars
    ORDER BY t.timestamp 
) q
GROUP BY group_number
ORDER BY from_timestamp

演示: - > http://www.sqlfiddle.com/#!2/2aa1e/10