SQLServer-按字段分组后取日期最新的一条

1.SQLServer-按字段分组后取日期最新的一条

sql 按字段分组后取日期最新的一条

第一种方式over(partition by)

select  t.* from (
    select a.*, row_number() over(partition by 需要分组的字段 order by 更新时间 desc) rw 
from 表 a) t where t.rw = 1;

第二种方式MAX(日期)

select t1.* from 表 t1 inner join (
   SELECT max(create_date) as create_date, 需要分组的字段mark
   FROM 表 group by mark
) t2 on t1.create_date=t2.create_date and t1.mark=t2.mark

2.sqlserver分组排序并取出每组中的第⼀条数据

sqlserver分组排序并取出每组中的第⼀条数据使⽤SQL Server数据库在【分组排序并取出每组中的第⼀条数据】的场景下,很容易想到的是使⽤GROUP BY分组⼦句配合聚合函数。举个简单的例⼦,有⼀个YANGGBS表,表中有NAME和AGE两个字段,要求统计出每个NAME的最⼤AGE。 
SELECT AA.*FROM YANGGBS AA    
INNER JOIN (SELECT NAME, MAX(AGE) FROM YANGGBS GROUP BY NAME) BB      
  ON AA.NAME = BB.NAME


另外⼀种⽅法就是使⽤开窗函数(分析函数),分组排序之后通过每个组中的顺序号来进⾏记录筛选。
SELECT AA.*FROM YANGGBS AA INNER JOIN 
        (
         SELECT NAME, ROW_NUMBER(PARTITION BY NAME ORDER BY AGE) AS RN  FROM YANGGBS
        ) BB        
         ON AA.NAME = BB.NAME AND BB.RN = 1 
更多的,这种⽅式在分页的实现上⽤途很⼤(通过RN进⾏顺序结果集筛选),⼏乎是数据库层⾯分页最好的解决⽅案。

posted @ 2022-05-21 11:12  朕在coding  阅读(6739)  评论(0编辑  收藏  举报