如何在sqlite中组合重复的连续条目

时间:2014-04-11 04:15:46

标签: sqlite

我有一个包含callhistory的数据库,看起来像这样

 Phonenumber             date/time

 6822311319     |   2014-04-21/ 12:10

 6822311319     |   2014-04-21/ 12:05

 9195432313     |   2014-04-21/ 11:10

 4324543234     |   2014-04-21/ 10:05

 6822311319     |   2014-04-21/ 06:10

 5344653244     |   2014-04-21/ 05:05

 5344653244     |   2014-04-21/ 04:10

 5344653244     |   2014-04-21/ 01:05

 7866545543     |   2014-04-21/ 00:10

 5344653244     |   2014-04-21/ 00:05   

要求是,如果两个呼叫事件来自同一个电话号码并且彼此连续,那么只应存储和显示该号码的最新呼叫。

我想知道我是否可以运行一个查询,它可以给我输出如下:

 Phonenumber           date/time

 6822311319     |   2014-04-21/ 12:10

 9195432313     |   2014-04-21/ 11:10

 4324543234     |   2014-04-21/ 10:05

 6822311319     |   2014-04-21/ 06:10

 5344653244     |   2014-04-21/ 05:05

 7866545543     |   2014-04-21/ 00:10

 5344653244     |   2014-04-21/ 00:05  

1 个答案:

答案 0 :(得分:1)

如果没有常见的表表达式或分析函数,查询就不是很优雅,但这似乎有效;

SELECT a.phonenumber, a.dt
FROM (
  SELECT phonenumber, dt, (SELECT COUNT(*) FROM myTable m2 WHERE m2.dt<m.dt) cnt 
  FROM myTable m
) a
LEFT JOIN (
  SELECT phonenumber, dt, (SELECT COUNT(*) FROM myTable m2 WHERE m2.dt<m.dt) cnt 
  FROM myTable m
) b
ON a.cnt+1=b.cnt
WHERE a.phonenumber<>b.phonenumber OR b.phonenumber IS NULL
ORDER BY a.dt DESC;

(可悲的是,SQLfiddle现在看起来有点累,或者我发布了一个小提琴)