sql获取多条有相同属性数据中的第一条
当我们遇到一条数据如
id bbid name time
1 2 上厕所 9:30
2 2 上厕所 14:30
3 2 上厕所 8:30
4 1 洗手 9:40
我们想将数据获取成下面这样子
id bbid name time
3 2 上厕所 8:30
3 1 洗手 9:40
就是合并相同bbid的数据,使之只展示该类中最早的一条
就需要用到ROW_NUMBER() OVER()函数,具体如下
SELECT
*
FROM
( SELECT
sb.ID ,sb.name,sb.bbId,
ROW_NUMBER() OVER(PARTITION
BY
ar.BB_ID
ORDER BY
ar.time DESC) fsp
from
表名 sb
LEFT JOIN
表名 ar
ON ar.BB_ID = sb.ID
order by
sb.ID desc ) atc
WHERE
fsp = 1
用fsp=1来筛选每个类别的第一条数据
另外附上一个其他排名函数的一个链接,讲的蛮清楚的
[sql 四大排名函数—(ROW_NUMBER、RANK、DENSE_RANK、NTILE)简介]