请问 MySQL 怎样实现根据特定条件筛选重复值?

2016-11-03 13:41:29 +08:00
 KagamineLenKai2

分公司 | 实时状态 | applyid | 操作人| 合同复核时间 | 合同编号
上面是我已经写好的查询,其中“合同编号”一列有重复值,我需要去重。
去重规则为当“合同编号”有重复值,并且“合同复核时间”都为同一天时,保留“合同复核时间”最大的一行。
当“合同编号”有重复值并且“合同复核时间”不为同一天时,保留每一天的最大值。比如说一个编号在 1 日出现了 2 次,在 2 日出现了 1 次,那么保留 1 日时间最大的一行和 2 日的那行。
因为权限原因我不能用临时表,不能用子查询,只能用连接查询。请问该怎样按条件去重呢?多谢各位 /(ㄒoㄒ)/~~

1670 次点击
所在节点    问与答
7 条回复
zakokun
2016-11-03 14:13:44 +08:00
搜索出来用其他语言处理,处理好了再塞回去
zachlhb
2016-11-03 14:30:21 +08:00
为什么同一天复核时不用更新而是用新增?
KagamineLenKai2
2016-11-03 14:37:35 +08:00
@zachlhb 更新的话就记录不到是否重复复核吧…表不是我建的┑( ̄Д  ̄)┍
Layne
2016-11-03 14:38:28 +08:00
你的权限允许把查询结果作为子表再进行连接查询吗?

先把你要查的这张表的数据按合同编号分组,合同复核时间取 MAX ,查询结果作为子表,合同编号和最大合同复合时间作为连接条件,再左连接这张表补充其他字段。

当然合同编号和合同复核时间两个字段要能确定一条记录。
KagamineLenKai2
2016-11-03 14:39:15 +08:00
@zakokun 然而我不是程序员,只是一个破做表的 /(ㄒoㄒ)/~~ 头像是 Len 吗?
KagamineLenKai2
2016-11-03 14:41:35 +08:00
@Layne 好,我试一下……
KagamineLenKai2
2016-11-03 15:16:50 +08:00
在 CSDN 上受人指点惹,这里把 SQL 贴出来,希望能帮到一些人

作者:鏡音連改二
链接: https://www.zhihu.com/question/52243984/answer/129648873
来源:知乎
著作权归作者所有,转载请联系作者获得授权。

SELECT
apply.org_name AS 分公司,
n.statusdes AS 实时状态,
operation_log.apply_id,
operation_log.operator_name AS 合同复核操作人,
max(
operation_log.operation_time
) AS 合同复核时间,
contract.contract_number AS 合同编号,
contract.actual_loan_time AS 实际放款时间,
contract.loan_amount AS 合同金额
FROM
operation_log
LEFT JOIN contract ON contract.apply_id = operation_log.apply_id
LEFT JOIN apply ON apply.apply_id = operation_log.apply_id
LEFT JOIN (
SELECT
group_concat(
DISTINCT c.status_code SEPARATOR '||'
) AS statussum,
c.is_in_node,
c.apply_id,
group_concat(
DISTINCT c.status_name SEPARATOR '||'
) AS statusdes,
group_concat(
DISTINCT c.operator_name SEPARATOR '||'
) AS operatornames
FROM
node_record c
WHERE
c.is_in_node = 1
AND c.is_valid = 1
GROUP BY
c.apply_id
) n ON apply.apply_id = n.apply_id
WHERE
operation_time >= "2016-11-1"
AND before_status_name = "合同复核中"
AND end_status_name = "合同复核完成"
AND operation_log.node_code = "REVIEW"
AND apply.is_ex_apply = '1'
AND apply.borrowing_type = '1'
AND operation_log.operator_name NOT LIKE "%测试%"
GROUP BY
apply.org_name,
n.statusdes,
operation_log.apply_id,
operation_log.operator_name,
DATE(
operation_log.operation_time
),
contract.contract_number,
contract.actual_loan_time,
contract.loan_amount

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/317712

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX