按顺序对记录进行分组(SQL)

时间:2014-05-30 15:46:15

标签: sql sqlite grouping

我的应用程序中有一个“通话记录”列表,但我希望将所有通话分组,只要它们是有序的(类似于android通话记录分组)。

我的意思是假设我们有这张表:

id  |  number  |  time
------------------------
1   |  2222    |  00:00
2   |  2222    |  01:15
3   |  5555    |  02:00
4   |  2222    |  03:15
5   |  2222    |  05:16

我需要的是一个看起来像这样的结果:

count  |  number
----------------
2      |  2222
1      |  5555
2      |  2222

但是通过使用常规GROUP BY,我得到了这个结果:

count  |  number
----------------
4      |  2222
1      |  5555

有人可以帮我查询吗?

1 个答案:

答案 0 :(得分:4)

这是一种复杂的查询,但我至少会尝试解释它; - )

为了获得良好的分组,您可以为每一行计算具有较少时间的行数与当前行数不同的行数。这将使具有相同数字的所有连续行具有相同的值,因为连续的数字将具有相同数量的其他数字。

要使其真正独一无二,只需将其与数字本身连接即可,这样您就可以在外部查询中轻松分组。

SELECT COUNT(*) "count", MIN(id) starting_id, number
FROM (
  SELECT a.id, a.number, a.number || '-' || COUNT(b.id) seq
  FROM mytable a
  LEFT JOIN mytable b
    ON a.id > b.id AND a.number <> b.number
  GROUP BY a.id, a.number
)
GROUP BY seq
ORDER BY id;

An SQLfiddle to test with