oracle查询:取出每组中的第一条记录
Oracle查询:取出每组中的第一条记录 方法一: 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. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |