select * from T T1 WHERE NOT EXISTS(SELECT 1 FROM T WHERE 人名=T1.人名 AND 登录时间>T1.登录时间)
还有一种分析函数的写法 select 人名,MAX(登录时间) 登录时间, max(C1)keep(dense_rank last order by 登录时间) C1, max(C2)keep(dense_rank last order by 登录时间) C2, max(C3)keep(dense_rank last order by 登录时间) C3, max(C4)keep(dense_rank last order by 登录时间) C4, from T GROUP BY 人名 语句中C1、C2、C3、C4为表中的其他字段,这种写法写起来比较麻烦,但是效率比not exists要好,如果数据量较大,建议这种写法
如果只要人名以及时间的话 select name,max(time) from t group by t.name
如果只要人名以及时间的话 select name,max(time) from t group by t.name 这个是正解
row_number() over(partation by ... order by ... desc) rn=1
5#的方法,补齐 SELECT * FROM (select T.*,row_number() over(partation by 人名 order by 登录时间 desc) rn from T) WHERE rn=1 目前来说,应该主要就1#、2#、5#这3种方法,速度的话2#最快
又想起来一种,这种应该比1#的方法还要慢一点 SELECT * FROM T T1 WHERE 登录时间=(SELECT MAX(登录时间) FROM T WHERE 人名=T1.人名)
WHERE NOT EXISTS(SELECT 1 FROM T WHERE 人名=T1.人名 AND 登录时间>T1.登录时间)
select
人名,MAX(登录时间) 登录时间,
max(C1)keep(dense_rank last order by 登录时间) C1,
max(C2)keep(dense_rank last order by 登录时间) C2,
max(C3)keep(dense_rank last order by 登录时间) C3,
max(C4)keep(dense_rank last order by 登录时间) C4,
from T
GROUP BY 人名
语句中C1、C2、C3、C4为表中的其他字段,这种写法写起来比较麻烦,但是效率比not exists要好,如果数据量较大,建议这种写法
如果只要人名以及时间的话
select name,max(time) from t group by t.name
如果只要人名以及时间的话
select name,max(time) from t group by t.name
这个是正解
rn=1
SELECT * FROM
(select T.*,row_number() over(partation by 人名 order by 登录时间 desc) rn
from T)
WHERE rn=1
目前来说,应该主要就1#、2#、5#这3种方法,速度的话2#最快
SELECT * FROM T T1
WHERE 登录时间=(SELECT MAX(登录时间) FROM T WHERE 人名=T1.人名)
-----------------使用上面的方法查询得到的数据;数据不正确。原因可能是两个登录时间一直的原因,但是也不应该出错啊;如果时间不一样的话,就不会出错了。这是什么原因呢,求解释
213912 admin 登录 登录 2014-10-24 08:56:56 112.16.50.57 112.16.50.57 Ztal http:Welcome.aspx-----------------原始数据
213912 admin 登录 Cookie登录 2014-10-24 08:56:56 112.16.10.114 112.16.10.114 app ssso
213911 admin 登录 登录 2014-10-24 08:56:56 112.16.50.57 112.16.50.57 Ztal http:Welcome.aspx
改为
order by 登录时间,rowid
即可
01445. 00000 - "cannot select ROWID from, or sample, a join view without a key-preserved table"
*Cause:
*Action:
行 61 列 19 出错
排序条件后面加上rowid,应该就没有这问题了