当前位置:网站首页>sql及list去重操作
sql及list去重操作
2022-06-28 05:56:00 【非生物语言学家】
一、sql使用场景1:分页查询任务对应的最后一条审核原因
1、查询主sql:用主表task链接审核记录表resion
SELECT * FROM task t LEFT JOIN resion r ON t.id=r.task_id LEFT JOIN xxxtable;
2、问题分析:一个任务对应多条审核记录,链接查询会产生笛卡尔积,结果集错误。对sql进行改造
SELECT
*
FROM
task t
LEFT JOIN (
SELECT
r.*
FROM
resion r
INNER JOIN ( SELECT task_id, max( create_time ) create_time FROM resion GROUP BY task_id ) a ON a.task_id = r.task_id
AND a.create_time = r.create_time
) e ON e.task_id = t.task_id
3、优化:当同一时间出现两条审核记录时依然避免不了数据集错误,所以可以加跟多的条件来保证附表的唯一性
SELECT
*
FROM
task t
LEFT JOIN (
SELECT
r.*
FROM
(
SELECT
a.*,
count( 1 ) onlyValue
FROM
resion a
INNER JOIN resion b ON a.task_id = b.task_id
AND a.create_time <= b.create_time
GROUP BY
a.resion_id
) r
WHERE
r.onlyValue = 1
) e ON e.task_id = t.task_id
二、list去重处理
1、采用TreeSet来去重
1.1、两次转换
// 这里是没去重的原始数据
List<TaskInfo> taskList=...;
// 根据id属性去重
Set<TaskInfo> taskSet = new TreeSet<>(Comparator.comparing(TaskInfo::getId));
taskSet.addAll(taskList);
taskList=new ArrayList<TaskInfo>(taskSet);
1.2、流式转换
List<TaskInfo> newList = taskList.stream().collect(Collectors
.collectingAndThen(
Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(TaskInfo::getId))),
ArrayList::new));
1.3、多属性联合去重
Set<TaskInfo> taskSet = new TreeSet<>(Comparator.comparing(o -> (o.getId() + "" + o.getDeptId())));
taskSet .addAll(taskList);
taskList=new ArrayList<TaskInfo>(taskSet);
2、采用map处理
2.1、流过滤
List<TaskInfo> taskList = new ArrayList<>();
oldList.stream().filter(distinctByKey(t ->t.getId())).forEach(taskList::add);
static <T> Predicate<T> distinctByKey(Function<? super T, ?> keyExtractor) {
Map<Object,Boolean> seen = new ConcurrentHashMap<>();
return t -> seen.putIfAbsent(keyExtractor.apply(t), Boolean.TRUE) == null;
}
2.2、流分组循环取第一个
边栏推荐
- 2022年全国职业院校技能大赛“网络安全”竞赛试题官方答案
- Taobao seo training video course [22 lectures]
- Binder interview: memory management unit
- 密码学笔记
- How to do a good job of dam safety monitoring
- YYGH-8-预约挂号
- Apple MDM bypass jailfree bypass MDM configuration lock free
- 开发者的时代红利在哪里?
- 【MYSQL】所有查询表中有2千万数据--sql如何优化
- Ape pink ape power - Developer activity attack!
猜你喜欢
Oracle condition, circular statement
A full set of excellent SEO tutorials worth 300 yuan [159 lessons]
Windows环境Redis使用AOF持久化,无法生成AOF文件,生成后无法加载AOF文件内容
Openharmony gnawing paper growth plan -- json-rpc
什么是WebRTC?
深度學習19種損失函數
sklearn 特征工程(总结)
基于Kotlin+JetPack实现的MVVM框架的示例
Jenkins continuous integration 1
RL 实践(0)—— 及第平台辛丑年冬赛季【Rule-based policy】
随机推荐
开发者的时代红利在哪里?
6. 毕业设计温湿度监控系统(ESP8266 + DHT11 +OLED 实时上传温湿度数据给公网服务器并在OLED显示屏上显示实时温湿度)
Caused by: com.fasterxml.jackson.databind.exc.InvalidFormatException:异常解决
【MYSQL】所有查询表中有2千万数据--sql如何优化
File foundation - read / write, storage
Capacity scheduling absolute value configuration queue usage and pit avoidance
Binder面试之:内存管理单元
Maskrcnn,fast rcnn, faster rcnn优秀视频
数据中台:AI中台的实施与总结
YYGH-BUG-02
Where is the era bonus for developers?
Failed to start component [StandardEngine[Catalina].StandardHost[localhost]]
Codeworks 5 questions per day (1700 for each)
Data midrange: implementation and summary of AI midrange
JQ picture amplifier
Object object to list collection
5GgNB和ng-eNB的主要功能
若依实现下拉框
Caused by: com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Cannot construct instance
Mysql-17- create and manage tables