我有一个包含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
答案 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现在看起来有点累,或者我发布了一个小提琴)