表结构
id node create_time user
111 lr 15:20:10 a
111 lr 15:30:20 b
111 lr 15:40:30 c
需求,按id和node分组,找出create_time最大的user,例如这道题最后要的结果是
id node user
111 lr c觉得应该不难,写半天没写出来,求大神帮忙。
id node create_time user
111 lr 15:20:10 a
111 lr 15:30:20 b
111 lr 15:40:30 c
需求,按id和node分组,找出create_time最大的user,例如这道题最后要的结果是
id node user
111 lr c觉得应该不难,写半天没写出来,求大神帮忙。
select a.id,a.node,a.user from (select id,node,max(create_time),user from 表 group by id,node) a
SELECT * FROM (
SELECT T.*, MAX(CREATE_TIME) OVER(PARTITION BY ID,NODE) MAX_CREATE_TIME FROM T_TABLE
)WHERE CREATE_TIME = MAX_CREATE_TIME
select max(t2.create_time) from table t2 )
一、select t.*, t.rowid from ZY_TEST1 t;这张表的数据是:
1 111 lr 2017/8/1 a AAAzIQAAEAAIUznAAA
2 111 lr 2017/8/9 b AAAzIQAAEAAIUznAAB
3 111 lr 2017/8/10 c AAAzIQAAEAAIUznAAC
4 111 lr 2017/8/12 c AAAzIQAAEAAIUznAAD
5 111 lr 2017/8/12 c AAAzIQAAEAAIUznAAE
二、SELECT * FROM (
SELECT T.*, MAX(CREATE_TIME) OVER(PARTITION BY IDOCID,NODE) MAX_CREATE_TIME FROM ZY_TEST1 T),这个语句查出来的数据并没有分组啊
1 111 lr 2017/8/1 a 2017/8/12
2 111 lr 2017/8/9 b 2017/8/12
3 111 lr 2017/8/12 c 2017/8/12
4 111 lr 2017/8/12 c 2017/8/12
5 111 lr 2017/8/10 c 2017/8/12
三、最后,能查出来数据是因为WHERE条件中的MAX啊,我的数据查出来的是这样
1 111 lr 2017/8/12 c 2017/8/12
2 111 lr 2017/8/12 c 2017/8/12
(select id,node,create_time,user,
rank()over(partition by id,node order by create_time desc) mm from t_table) a
where a.mm=1
如果CREATE_TIME和USER定长的话(USER不定长也行,需要修改下),可以用下面变态的:
SELECT ID,NODE,SUBSTR(MAX(CREATE_TIME||USER),9,1)
FROM T
GROUP BY ID,NODE
(select id,node,create_time,user,
row_number() over(partition by id,node order by create_time desc) mm from t_table) a
where a.mm=1用 row_number() 以避免重复数据
一、select t.*, t.rowid from ZY_TEST1 t;这张表的数据是:
1 111 lr 2017/8/1 a AAAzIQAAEAAIUznAAA
2 111 lr 2017/8/9 b AAAzIQAAEAAIUznAAB
3 111 lr 2017/8/10 c AAAzIQAAEAAIUznAAC
4 111 lr 2017/8/12 c AAAzIQAAEAAIUznAAD
5 111 lr 2017/8/12 c AAAzIQAAEAAIUznAAE
二、SELECT * FROM (
SELECT T.*, MAX(CREATE_TIME) OVER(PARTITION BY IDOCID,NODE) MAX_CREATE_TIME FROM ZY_TEST1 T),这个语句查出来的数据并没有分组啊
1 111 lr 2017/8/1 a 2017/8/12
2 111 lr 2017/8/9 b 2017/8/12
3 111 lr 2017/8/12 c 2017/8/12
4 111 lr 2017/8/12 c 2017/8/12
5 111 lr 2017/8/10 c 2017/8/12
三、最后,能查出来数据是因为WHERE条件中的MAX啊,我的数据查出来的是这样
1 111 lr 2017/8/12 c 2017/8/12
2 111 lr 2017/8/12 c 2017/8/12
感觉不太对啊,
一、select t.*, t.rowid from ZY_TEST1 t;这张表的数据是:
1 111 lr 2017/8/1 a AAAzIQAAEAAIUznAAA
2 111 lr 2017/8/9 b AAAzIQAAEAAIUznAAB
3 111 lr 2017/8/10 c AAAzIQAAEAAIUznAAC
4 111 lr 2017/8/12 c AAAzIQAAEAAIUznAAD
5 111 lr 2017/8/12 c AAAzIQAAEAAIUznAAE
二、SELECT * FROM (
SELECT T.*, MAX(CREATE_TIME) OVER(PARTITION BY IDOCID,NODE) MAX_CREATE_TIME FROM ZY_TEST1 T),这个语句查出来的数据并没有分组啊
1 111 lr 2017/8/1 a 2017/8/12
2 111 lr 2017/8/9 b 2017/8/12
3 111 lr 2017/8/12 c 2017/8/12
4 111 lr 2017/8/12 c 2017/8/12
5 111 lr 2017/8/10 c 2017/8/12
三、最后,能查出来数据是因为WHERE条件中的MAX啊,我的数据查出来的是这样
1 111 lr 2017/8/12 c 2017/8/12
2 111 lr 2017/8/12 c 2017/8/12
这个已经分组了,只不过是最大时间有两个,你把这两个其中一个的id或者node改下就可以看出来分组了。
要是想只要一条数据的话可以这样SELECT * FROM (
SELECT T.*, ROW_NUMBER() OVER(PARTITION BY ID,NODE ORDER BY CREATE_TIME DESC) RN FROM T_TABLE
)WHERE RN= 1