如果你想只取得某一个用户的最后记录信息,如下:select top 1 * from logs where userid = @id order by logdate desc 如果想得到所有用户的最后的记录信息,如下: select * from ( select * , row_number() over(partition by userid order by logdate desc ) as rn from logs ) x where rn = 1
over() 是一个关键字,括号里面的内容,基本上就是 partition by 和 order by 两个子句partition by ,从字面上讲是分区的意思,可以理解为分组的意思,就比如你的记录表中有 10 个人,最后要实现的效果就是每个的记录都是从1开始,张三1,张三2,张三100。 李四1 , 李四2 道理一样。order by ,是张三自己有10 条记录,哪条是张三1,哪条是张三 10 ,就是按这个排序。不知道是不是,说明白了没有。我需要根据所有用户ID查询在某一个操作时间段内的最后一行。-- 查所有用户,就用这个。 select * from ( select * , row_number() over(partition by userid order by logdate desc ) as rn from logs where .... -- 这里可以加上你的时间段的条件。 ) x where rn = 1
如果想得到所有用户的最后的记录信息,如下:
select * from
(
select * , row_number() over(partition by userid order by logdate desc ) as rn from logs
) x
where rn = 1
[征集]分组取最大N条记录方法征集,及散分...
问下。呢个,row_number() over是什么?还有partition 是什么?
我需要根据所有用户ID查询在某一个操作时间段内的最后一行。
select * from
(
select * , row_number() over(partition by userid order by logdate desc ) as rn from logs
where .... -- 这里可以加上你的时间段的条件。
) x
where rn = 1