分组后获取第二条,去重时可使用。

本文介绍了一种使用SQL中的groupConcat函数结合substring来从特定位置提取数据的方法。通过具体实例展示了如何在查询中利用这些函数来筛选重复的数据记录。

基本思路是: 使用groupConcat函数连接字段值之后,用字符串截取的方式获取指定位置的数值。

select

substring(GROUP_CONCAT(stock_data_id order by create_time ), 1, 6) - 此处为关键。

stock_data_id, stock_code, trade_date,count(*) from biz_stock_data where trade_date = ‘2022-01-10’
group By stock_code, trade_date

having count(*) > 1

### SQL 分组后筛选每组内部条件记录方法 为了在SQL中对分组后的数据筛选出每组内满足特定条件的一条记录,可以采用多种方式来实现这一目标。一种常见的方式是利用窗口函数`ROW_NUMBER()`来进行操作。 当需要获取每个部门薪资最高的员工信息,可以通过如下SQL语句完成: ```sql WITH RankedEmployees AS ( SELECT empno, department, salary, ROW_NUMBER() OVER (PARTITION BY department ORDER BY salary DESC) as rn FROM employees ) SELECT empno, department, salary FROM RankedEmployees WHERE rn = 1; ``` 上述代码首先创建了一个名为`RankedEmployees`的CTE(Common Table Expression),其中包含了按照部门划分并依据工资降序排列的结果集,并给每一行分配了一个序列号rn。接着在外层查询中仅选择了那些具有最小rn值(即1)的行,这意味着对于每一个部门而言只会保留一名拥有最高薪水的雇员的信息[^4]。 另一种方案是在不支持窗口函数的老版本数据库上使用子查询配合聚合函数MAX/MIN以及JOIN操作达成相同效果: ```sql SELECT e.* FROM employees e INNER JOIN ( SELECT department, MAX(salary) max_salary FROM employees GROUP BY department ) m ON e.department = m.department AND e.salary = m.max_salary; ``` 这里先构建了一个包含各部门最大薪酬金额的临表m,随后将其与原始表格employees做连接匹配得到最终所需结果。需要注意的是如果存在多名员工享有相同的最高薪,则该方法会返回多条记录[^5]。 #### 注意事项 - 如果希望获得除了最高/最低之外其他位置上的成员,比如第二高或第三低等,那么应该调整`ORDER BY`部分逻辑; - 当遇到有复数值情况下的特殊需求处理,如只选取单个实例而非全部符合条件者,可能还需要额外增加措施。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值