因项目需要,行数据转列数据,并且要对同类数据取最后一条,如果是写java代码就不用说了,查询再过滤,但是会对分页啥啥的有影响,鄙人不太爱写那种一大堆java代码来处理一个简单问题。
首先我们要先把数据查询出来看看,这是按照日期、人、类型进行分组排序

SELECT task.*,
row_number() over (partition by task.person_zid,task.type,task.report_date order by task.create_time DESC) as group_idx ,person.zid as personZid,person.person_name as personName,IFNULL(TIMESTAMPDIFF(year,person.birth_date,NOW()),person.age) age,person.gender,person.hs_id as hisId,task.org_zid as orgZid,report_date reportDate,org.org_name orgName,org.org_code orgCode
FROM HS_REPORT_TASK task
LEFT OUTER JOIN VIEW_USER_AUTH_ORG vuao on task.org_zid = vuao.org_zid
LEFT OUTER JOIN HS_ORG org on org.zid = task.org_zid
LEFT OUTER JOIN HS_PERSON person on task.person_zid = person.zid
LEFT OUTER JOIN HS_INPATIENT hi on task.person_zid = hi.person_zid
WHERE (task.type in ("smwt","cat","sgrq","sas","sds","psqi","mna","adl","fim","gad","phq") AND task.status not in ('RETRYED','INVALID')  AND task.org_zid = 'vnyksq5aBw') and task.person_zid = '930f8eab7d2c4c11aacac4987e5c2c80'

然后还要把这行数据转列数据,而且是动态的字段,当然经过处理显示为指定字段,获取排序规则为1的数据

这个是自动产生过后的语句有点多,不太好看。

SELECT personZid,personName,age,gender,hisId,orgZid,reportDate,orgName,orgCode,max(case task.`type` WHEN 'smwt' THEN task.zid  ELSE NULL end) smwt,max(case task.`type` WHEN 'smwt' THEN task.status  ELSE NULL end) smwtStatus,max(case task.`type` WHEN 'smwt' THEN task.status_desc  ELSE NULL end) smwtDesc,max(case task.`type` WHEN 'smwt' THEN task.version  ELSE NULL end) smwtVersion,max(case task.`type` WHEN 'cat' THEN task.zid  ELSE NULL end) cat,max(case task.`type` WHEN 'cat' THEN task.status  ELSE NULL end) catStatus,max(case task.`type` WHEN 'cat' THEN task.status_desc  ELSE NULL end) catDesc,max(case task.`type` WHEN 'cat' THEN task.version  ELSE NULL end) catVersion,max(case task.`type` WHEN 'sgrq' THEN task.zid  ELSE NULL end) sgrq,max(case task.`type` WHEN 'sgrq' THEN task.status  ELSE NULL end) sgrqStatus,max(case task.`type` WHEN 'sgrq' THEN task.status_desc  ELSE NULL end) sgrqDesc,max(case task.`type` WHEN 'sgrq' THEN task.version  ELSE NULL end) sgrqVersion,max(case task.`type` WHEN 'sas' THEN task.zid  ELSE NULL end) sas,max(case task.`type` WHEN 'sas' THEN task.status  ELSE NULL end) sasStatus,max(case task.`type` WHEN 'sas' THEN task.status_desc  ELSE NULL end) sasDesc,max(case task.`type` WHEN 'sas' THEN task.version  ELSE NULL end) sasVersion,max(case task.`type` WHEN 'sds' THEN task.zid  ELSE NULL end) sds,max(case task.`type` WHEN 'sds' THEN task.status  ELSE NULL end) sdsStatus,max(case task.`type` WHEN 'sds' THEN task.status_desc  ELSE NULL end) sdsDesc,max(case task.`type` WHEN 'sds' THEN task.version  ELSE NULL end) sdsVersion,max(case task.`type` WHEN 'psqi' THEN task.zid  ELSE NULL end) psqi,max(case task.`type` WHEN 'psqi' THEN task.status  ELSE NULL end) psqiStatus,max(case task.`type` WHEN 'psqi' THEN task.status_desc  ELSE NULL end) psqiDesc,max(case task.`type` WHEN 'psqi' THEN task.version  ELSE NULL end) psqiVersion,max(case task.`type` WHEN 'mna' THEN task.zid  ELSE NULL end) mna,max(case task.`type` WHEN 'mna' THEN task.status  ELSE NULL end) mnaStatus,max(case task.`type` WHEN 'mna' THEN task.status_desc  ELSE NULL end) mnaDesc,max(case task.`type` WHEN 'mna' THEN task.version  ELSE NULL end) mnaVersion,max(case task.`type` WHEN 'adl' THEN task.zid  ELSE NULL end) adl,max(case task.`type` WHEN 'adl' THEN task.status  ELSE NULL end) adlStatus,max(case task.`type` WHEN 'adl' THEN task.status_desc  ELSE NULL end) adlDesc,max(case task.`type` WHEN 'adl' THEN task.version  ELSE NULL end) adlVersion,max(case task.`type` WHEN 'fim' THEN task.zid  ELSE NULL end) fim,max(case task.`type` WHEN 'fim' THEN task.status  ELSE NULL end) fimStatus,max(case task.`type` WHEN 'fim' THEN task.status_desc  ELSE NULL end) fimDesc,max(case task.`type` WHEN 'fim' THEN task.version  ELSE NULL end) fimVersion,max(case task.`type` WHEN 'gad' THEN task.zid  ELSE NULL end) gad,max(case task.`type` WHEN 'gad' THEN task.status  ELSE NULL end) gadStatus,max(case task.`type` WHEN 'gad' THEN task.status_desc  ELSE NULL end) gadDesc,max(case task.`type` WHEN 'gad' THEN task.version  ELSE NULL end) gadVersion,max(case task.`type` WHEN 'phq' THEN task.zid  ELSE NULL end) phq,max(case task.`type` WHEN 'phq' THEN task.status  ELSE NULL end) phqStatus,max(case task.`type` WHEN 'phq' THEN task.status_desc  ELSE NULL end) phqDesc,max(case task.`type` WHEN 'phq' THEN task.version  ELSE NULL end) phqVersion
FROM (select s.* from ( SELECT task.*,person.zid as personZid,person.person_name as personName,IFNULL(TIMESTAMPDIFF(year,person.birth_date,NOW()),person.age) age,person.gender,person.hs_id as hisId,task.org_zid as orgZid,report_date reportDate,org.org_name orgName,org.org_code orgCode,
row_number() over (partition by task.person_zid,task.type,task.report_date order by task.create_time DESC) as group_idx
FROM HS_REPORT_TASK task
LEFT OUTER JOIN VIEW_USER_AUTH_ORG vuao on task.org_zid = vuao.org_zid
LEFT OUTER JOIN HS_ORG org on org.zid = task.org_zid
LEFT OUTER JOIN HS_PERSON person on task.person_zid = person.zid
LEFT OUTER JOIN HS_INPATIENT hi on task.person_zid = hi.person_zid
WHERE (task.type in ("smwt","cat","sgrq","sas","sds","psqi","mna","adl","fim","gad","phq") AND task.status not in ('RETRYED','INVALID')  AND task.org_zid = 'vnyksq5aBw' and task.person_zid = '930f8eab7d2c4c11aacac4987e5c2c80'))s  where s.group_idx = 1)task
GROUP BY personZid,reportDate
ORDER BY reportDate DESC

关心最重要的一句就行

row_number() over (partition by task.person_zid,task.type,task.report_date order by task.create_time DESC) as group_idx

哦了,记录下,很久之前写的因为一个bug调试,发现忘记了,记录下

mysql中函数row_number()如何使用它为结果集中的每一行生成序列号相关推荐

  1. 16、mysql中函数的创建和使用

    sql语言可以进行编程,说到编程,那一定少不了使用函数对代码进行最小级别的封装,接下来介绍一下mysql中函数的写法以及应用 mysql中的函数可分为两类:系统函数.用户自定义函数. 简单的介绍几个常 ...

  2. [Mysql] RANK()函数 | ROW_NUMBER()函数 | DENSE_RANK()函数

    窗口函数的基本语法 <窗口函数> OVER ([PARTITION BY <用于分组的列>] ORDER BY <用于排序的列>) ※ []中的内容可以省略 注意: ...

  3. MySQL中函数CONCAT及GROUP_CONCAT

    一.CONCAT()函数 CONCAT()函数用于将多个字符串连接成一个字符串. 使用数据表Info作为示例,其中SELECT id,name FROM info LIMIT 1;的返回结果为 +-- ...

  4. MySQL中函数CONCAT及GROUP_CONCAT 对应oracle中的wm_concat

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程. 一.CONCAT()函数 CONCAT()函数用于将多个字符串连接成一个字符串. 使用数据表Info ...

  5. MySQL中函数field()的用法

    MySQL中的field()函数,可以用来对SQL中查询结果集进行指定顺序排序. 函数使用格式如下: order by (str,str1,str2,str3,str4--),str与str1,str ...

  6. mysql中函数mid_MySQL MID()函数的用法详解(代码示例)

    在MySQL中,MID()函数返回从指定位置开始的子字符串. MID()和SUBSTR()都是SUBSTRING()的同义词. 基本语法是这样的:MID(str,pos,len) 这里,str是字符串 ...

  7. mysql中如何row_number函数_ROW_NUMBER()函数使用详解

    实例如下: 1.使用row_number()函数进行编号,如 select email,customerID, ROW_NUMBER() over(order by psd) as rows from ...

  8. mysql中函数大全_MySql 函数大全(一)

    mysql> SELECT 1+"1"; -> 2 mysql> SELECT CONCAT(2,' test'); -> '2 test' 如果你想要明确 ...

  9. mysql 中函数如何转存_mysql 导入导出数据库以及函数、存储过程 【转】

    MySQL常用导出数据命令: 1.mysql导出整个数据库 mysqldump -hhostname -uusername -ppassword databasename > backupfil ...

最新文章

  1. 你最喜欢的“程序员”卡通是什么?
  2. 前端学习(2179):vue-router-router的由来和vue-router
  3. 5页面放大再正常显示_一加5/5TFlyme8 9.9.24 功能一览
  4. Pytorch损失函数BCELoss,BCEWithLogitsLoss
  5. python绘图之散点图
  6. 平面设计完全手册_工业时代的平面设计
  7. Pr 与音频相关的调整方法
  8. QML类型:Window
  9. 沃邮箱 android,沃邮箱Android客户端产品体验报告
  10. 42. OP-TEE中secure stroage------安全文件的创建
  11. 2021年中国全自动棉纱缠绕机市场趋势报告、技术动态创新及2027年市场预测
  12. Picasso加载圆角图片
  13. 给Ubuntu文件夹解锁
  14. jQuery框架的介绍以及基本用法--操作dom
  15. 关于DSP320F28335步进电机控制几个问题
  16. C++ —— 到底还能做什么?
  17. 【蓝桥杯Python组】既约分数
  18. 特斯拉“踩坑”分时Linux?丰田/Mobileye选择“迎难而上”
  19. 以豌豆荚为例,用 Scrapy 爬取分类多级页面
  20. 用Python把视频转动图

热门文章

  1. AD19画原理图和PCB注意事项和步骤(主要为PCB和总结注意事项)
  2. 软件工程与计算机科学的联系与区别
  3. 锤炼腹肌的好方法:健腹轮的折叠刀式俯卧撑
  4. 基于Cesium的火箭发射演示
  5. 用C语言和JS分别实现“个税年度汇算清缴”计算
  6. 【机器学习面试】百面机器学习笔记和问题总结+扩展面试题
  7. cph = CoxPHFitter()训练过程中遇到的坑以及画图
  8. POI设置excel样式
  9. linux基础知识大纲
  10. zabbix3.4绘制网络拓扑图