我有这个表,我希望返回每个MID的最新(基于最高ID)结果
╔══════╦═══════╦══════╦═════════════════════╦════════╦═════════╗
║ ID ║ MID ║ Call ║ Call_Timestamp ║ Quoted ║ Outcome ║
╠══════╬═══════╬══════╬═════════════════════╬════════╬═════════╣
║ 1957 ║ 31463 ║ Yes ║ 03/06/2014 11:55:20 ║ No ║ Yes ║
║ 1958 ║ 31463 ║ Yes ║ 04/06/2014 09:43:25 ║ No ║ No ║
║ 1959 ║ 31671 ║ Yes ║ 04/06/2014 10:10:08 ║ Yes ║ No ║
║ 1960 ║ 31671 ║ Yes ║ 04/06/2014 10:10:25 ║ No ║ Yes ║
╚══════╩═══════╩══════╩═════════════════════╩════════╩═════════╝
例如我应该返回
╔══════╦═══════╦══════╦═════════════════════╦════════╦═════════╗
║ ID ║ MID ║ Call ║ Call_Timestamp ║ Quoted ║ Outcome ║
╠══════╬═══════╬══════╬═════════════════════╬════════╬═════════╣
║ 1958 ║ 31463 ║ Yes ║ 04/06/2014 09:43:25 ║ No ║ No ║
║ 1960 ║ 31671 ║ Yes ║ 04/06/2014 10:10:25 ║ No ║ Yes ║
╚══════╩═══════╩══════╩═════════════════════╩════════╩═════════╝
谢谢, 罗布
答案 0 :(得分:1)
not exists
查询通常是最有效的方法:
select t.*
from table t
where not exists (select 1
from table t2
where t2.mid = t.mid and
t2.id > t.id
);
这实现了逻辑:"从表中获取所有行,其中没有具有相同mid
和更高id
"的行。做你想做的事的一种奇特的方式。
对于性能,table(mid, id)
上的索引有帮助。
答案 1 :(得分:0)
在join
上创建inline view
id
每mid
,然后获取匹配的记录:
select *
from tableX t
join ( select mid
, max(id) max_id
from tableX
group
by mid
) v
on v.mid = t.mid
and v.max_id = t.id