题解 | #插入记录(二)#
注册时间最早的三个人
http://www.nowcoder.com/practice/fbe36305c6dd4954a05cc2f2f12e4f4a
SELECT uid, nick_name ,register_time
FROM user_info
ORDER BY register_time
LIMIT 3
或
SELECT t.uid, t.nick_name , t.register_time
FROM
(SELECT uid, nick_name ,register_time,
ROW_NUMBER() OVER(ORDER BY register_time ASC) rk
FROM user_info
) t
WHERE rk<=3
注意:用窗口函数的时候,只能用ROW_NUMBER(),不可以用RANK()和DENSE_RANK() 原因如下:
ROW_NUMBER()
: 排名时不管是否有相同的,都按1,2,3...n排名,(相同的排名先后应该是看表格的第一字段,若相同再看第二个字段排名,以此类推)(我猜测的)
RANK()
: 如果排名的字段有相同的,会将相同的字段并列排名,并跳过后面的排名,
DENSE_RANK()
: 如果排名的字段有相同的,会将相同的字段并列排名,但是不会跳过后面的排名
WHERE 子句这里 rk<=3,如果时间有相同的,用RANK()和DENSE_RANK()筛选出来的会大于3个