SQL获取第⼀条记录的⽅法(sqlserver、oracle、mysql
数据库)
Sqlserver 获取每组中的第⼀条记录
在⽇常⽣活⽅⾯,我们经常需要记录⼀些操作,类似于⽇志的操作,最后的记录才是有效数据,⽽且可能它们属于不同的⽅⾯、功能下⾯,从数据库的术语来说,就是查出每组中的⼀条数据。下⾯我们要实现的就是在sqlserver中实现从每组中取出第⼀条数据。
例⼦
我们要从上⾯获得的有效数据为:
对应的sql语句如下所⽰:
select * from t1 t where id = (select top 1 id from t1 where grp = t.grp order by createtime desc )
下⾯给⼤家介绍oracle查询取出每组中的第⼀条记录
mysql group by order byoracle查询:取出每组中的第⼀条记录
按type字段分组,code排序,取出每组中的第⼀条记录
⽅法⼀:
select type,min(code) from group_info
group by type;
注意:select 后⾯的列要在group by ⼦句中,或是⽤聚合函数包含,否则会有语法错误。
⽅法⼆:
SELECT * FROM(
pe , z.code ,ROW_NUMBER()
OVER(PARTITION pe ORDER de) 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;
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论