需求
展示相同线索不同人访问的最新时间的一条记录
数据样式
最终SQL
select
t.id
,t.clue_code as clueCode
,t.user_id as userId
,t.user_name as userName
,t.depart_id as departId
,t.depart_name as departName
,t.ip
,t.create_time as createTime
from
(
select
id
,clue_code
,user_id
,user_name
,depart_id
,depart_name
,ip
,create_time
,row_number() over(partition by user_id order by create_time desc) as n
from ZHMX_DATA_AHSJ.tb_clue_read_info where clue_code = #{clueCode}
) t
where t.n=1
解释说明
简单的说row_number()从1开始,为每一条分组记录返回一个数字
row_number() OVER (PARTITION BY COL1 ORDER BY COL2) 表示根据COL1分组,在分组内部根据 COL2排序,而此函数计算的值就表示每组内部排序后的顺序编号(组内连续的唯一的);
可以看出先执行的是where 进行筛选后,再通过分组,组内再排序,排序后在添加编号,其实是和正常的执行顺序一样的,只不过位置变了;