加入收藏 | 设为首页 | 会员中心 | 我要投稿 聊城站长网 (https://www.0635zz.com/)- 智能语音交互、行业智能、AI应用、云计算、5G!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

SQL Server中怎么实现获取每组中的首条记录

发布时间:2023-04-25 13:50:08 所属栏目:MsSql教程 来源:
导读:这篇文章主要介绍“SQL Server中怎么实现获取每组中的第一条记录”,有一些人在SQL Server中怎么实现获取每组中的第一条记录的问题上存在疑惑,接下来小编就给大家来介绍一下相关的内容,希望对大家解答有
这篇文章主要介绍“SQL Server中怎么实现获取每组中的第一条记录”,有一些人在SQL Server中怎么实现获取每组中的第一条记录的问题上存在疑惑,接下来小编就给大家来介绍一下相关的内容,希望对大家解答有帮助,有这个方面学习需要的朋友就继续往下看吧。
 
Sqlserver 获取每组中的第一条记录
 
在日常生活方面,我们经常需要记录一些操作,类似于日志的操作,最后的记录才是有效数据,而且可能它们属于不同的方面、功能下面,从数据库的术语来说,就是查找出每组中的一条数据。下面我们要实现的就是在sqlserver中实现从每组中取出第一条数据。
 
例子

我们要从上面获得的有效数据为:
 
对应的sql语句如下所示:
 
select * from t1 t where id = (select top 1 id from t1 where grp = t.grp order by createtime desc )
 
下面给大家介绍oracle查询取出每组中的第一条记录
 
oracle查询:取出每组中的第一条记录
 
按type字段分组,code排序,取出每组中的第一条记录
 
 方法一:
 
select type,min(code) from group_info
 
group by type;
 
注意:select 后面的列要在group by 子句中,或是用聚合函数包含,否则会有语法错误。
 
方法二:
 
SELECT * FROM(
 
SELECT z.type , z.code ,ROW_NUMBER()
 
OVER(PARTITION BY z.type ORDER BY z.code) AS code_id
 
FROM group_info z
 
)
 
WHERE code_id =1;
 
这里涉及到的over()是oracle的分析函数
 
参考sql reference文档:
 
Analytic functions compute an aggregate value based on a group of rows. They differ from aggregate functions in that they return multiple rows for each group.
 
Analytic functions are the last set of operations performed in a query except for the final ORDER  BY clause. All joins and all WHERE , GROUP  BY , and HAVING clauses are completed before the analytic functions are processed. Therefore, analytic functions can appear only in the select list or ORDER  BY clause.
 
语法结构:
 
analytic_function ([ arguments ]) OVER
 
 (analytic_clause)
 
其中analytic_clause结构包括:
 
[ query_partition_clause ]
 
[ order_by_clause [ windowing_clause ] ]
 
也就是:函数名( [ 参数 ] ) over( [ 分区子句 ]  [ 排序子句 [ 滑动窗口子句 ] ])
 
这里PARTITION BY 引导的分区子句类似于聚组函数中的group by,排序子句可看成是select语句中的order by.
 
mysql 中只获取1条数据
 
SELECT * FROM 表 LIMIT 0, 10
 
LIMIT 接受一个或两个数字参数。
 
参数必须是一个整数常量。
 
如果给定两个参数,第一个参数指定第一个返回记录行的偏移量,
 
第二个参数指定返回记录行的最大数目。
 
初始记录行的偏移量是 0(而不是 1)
 
主意:limit 用于 having 之后
 
自己的示例:
 
select count(1),tpc_equipment_code from tb_parts_consume GROUP BY tpc_equipment_code ORDER BY count(1) DESC LIMIT 1;据
 
 

(编辑:聊城站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章