mysql怎么根据系统标识优先取最新系统的数据?
简单描述:需要展示机构名称、机构编码(可能是ORG_CODE,也可能是BASE_ORG_CODE,优先取值BASE_ORG_CODE),有三个系统,各系统数据优先级:3 > 2 > 1
需要支持:
1.数据优先级:系.统3 > 系,统2 > 系统1(不同系统之间部门名称可能不一致,如系统3部门名称为X_aa,系统2部门名称为X_bb)
2.在第1条的基础上优先取BASE_ORG_CODE字段作为机构编码,如果没有则取ORG_CODE字段
3.需根据机构名称进行右模糊查询
4.需根据机构编码精确查询
5.需要支持分页查询
create table tbl_org_info
(
ID bigint auto_increment comment 'ID.'
ORG_CODE varchar(50) default '' not null comment '机构编码',
BASE_ORG_CODE varchar(50) default '' not null comment '机构编码(优先于org_code)',
ORG_NAME varchar(50) default '' not null comment '机构名称',
SOURCE_TYPE smallint(4) default 1 not null comment '数据来源,1,2,3'
)
随便写的
SQL
,没提供简易数据,我也测试不了。主要思想:分组后取
SOURCE_TYPE
最大值所在行。注:
MySQL
有 子查询、关联子查询、自连接、窗口函数 4 种方法。我用了关联子查询,其他写法可参考MySQL 官方文档 - 分组后取某一列最大值所在行。SQLite
的话,可以直接GROUP BY
后用MAX(SOURCE_TYPE)
来取(参考 SQLite 官方文档 - 聚合查询中的裸列值)1. 根据右模糊的机构名称,查询机构编号
2. 根据机构编码,查询最新的机构名称