我有一个数据表,格式如下,每个senid的发送时间不是相同的。
dataId senid senValue time
***** 1 100 3:45:00
***** 1 100 3:40:00
***** 1 100 3:35:00
***** 1 100 3:30:00
***** 2 2000 3:45:00
***** 2 2000 3:44:00
***** 2 2000 3:43:00
***** 2 2000 3:42:00
***** 3 300 3:44:50
***** 3 300 3:44:40
***** 3 300 3:44:30
***** 3 300 3:44:20
要查找每个 senid 的最新数据,得到的结果应该如下所示
senid senValue time
1 100 3:45:00
2 2000 3:45:00
3 300 3:44:50
就是这样,查找出来每个senid的最新数据和时间。请问这个sql语句应该怎么写比较好?
oracle sql
------解决方案--------------------
with t as
(
select 1 sendid, 100 sendv, '3:45:00' sendt from dual
union all
select 1 sendid, 100 sendv, '3:40:00' sendt from dual
union all
select 2 sendid, 200 sendv, '3:45:00' sendt from dual
union all
select 2 sendid, 200 sendv, '3:40:00' sendt from dual
union all
select 3 sendid, 300 sendv, '3:45:50' sendt from dual
union all
select 3 sendid, 300 sendv, '3:45:40' sendt from dual
)
select sendid,sendv, max(sendt) from t group by sendid, sendv
不知道楼主到底什么意思,是不是太简单了。。。我理解错了
------解决方案--------------------
如果 senid 对应的 sendv 都是相同的,那楼上的方法直接求 sendt的max就可以。如果不同。
select sendid, max(sendt),max(sendv)keep(dense_rank first order by sendt desc ) sendt from t group by sendid
------解决方案--------------------
with t as
(select 1 sendid, 100 sendv, '3:45:00' sendt
from dual
union all
select 1 sendid, 100 sendv, '3:40:00' sendt
from dual
union all
select 2 sendid, 200 sendv, '3:45:00' sendt
from dual
union all
select 2 sendid, 200 sendv, '3:40:00' sendt
from dual
union all
select 3 sendid, 300 sendv, '3:45:50' sendt
from dual
union all
select 3 sendid, 300 sendv, '3:45:40' sendt from dual)
select sendid, sendv, sendt