SQL 实现全字段分组,每组取一条记录,记录满足:组内时间最大,组内不同类型数量求和
- 1 SELECT
- 2 TT.CLASS_ID AS "classId",
- 3 TT.TEMPLATE_ID AS "templateId" ,
- 4 TT.MSG_CLASS_NAME AS "templateName",
- 5 TT.MSG_CLASS_CODE AS "templateCode",
- 6 TT.TEMPLATE_TITLE AS "templateTitle",
- 7 TT.TEMPLATE_TYPE AS "templateType",
- 8 TT.TEMPLATE_CONTENT AS "templateContent",
- 9 TT.MSG_SUBJECT AS "msgSubject",
- 10 TT.MSG_TITLE AS "msgTitle",
- 11 TT.MSG_CONTENT AS "msgContent",
- 12 TT.SEND_TIME AS "sendTime",
- 13 TT.COUNTNO AS "countNo",
- 14 TT.TOTAL AS "count" ,
- 15 TT.ICON AS "icon"
- 16 FROM
- 17 (
- 18 SELECT
- 19 TEMP.CLASS_ID, TEMP.TEMPLATE_ID , TEMP.ICON , TEMP.MSG_CLASS_NAME, TEMP.MSG_CLASS_CODE, TEMP.TEMPLATE_TITLE , TEMP.TEMPLATE_TYPE , TEMP.TEMPLATE_CONTENT , TEMP2.MSG_SUBJECT , TEMP2.MSG_TITLE , TEMP2.MSG_CONTENT , TEMP2.SEND_TIME , TEMP2.COUNTNO , SUM(TEMP2.COUNTNO) OVER (PARTITION BY TEMP.MSG_CLASS_CODE
- 20 ORDER BY
- 21 TEMP2.SEND_TIME DESC ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS TOTAL, ROW_NUMBER() OVER (PARTITION BY TEMP.CLASS_ID
- 22 ORDER BY
- 23 TEMP2.SEND_TIME ASC) AS ROWNO
- 24 FROM
- 25 (
- 26 SELECT
- 27 tamc.CLASS_ID , tamc.ICON , tamc.MSG_CLASS_NAME , tamc.MSG_CLASS_CODE , tamt.TEMPLATE_TYPE , tamt.TEMPLATE_ID , tamt.TEMPLATE_NAME , tamt.TEMPLATE_TITLE , tamt.TEMPLATE_CONTENT
- 28 FROM
- 29 MEAB.T_AP_MESSAGE_CLASS tamc
- 30 LEFT JOIN MEAB.T_AP_CLASS_TEMPLATE tact ON
- 31 tamc.CLASS_ID = tact.CLASS_ID
- 32 LEFT JOIN MEAB.T_AP_MESSAGE_TEMPLATE tamt ON
- 33 tamt.TEMPLATE_ID = tact.TEMPLATE_ID) TEMP
- 34 LEFT JOIN (
- 35 SELECT
- 36 TT.MSG_SUBJECT , TT.MSG_CONTENT , TT.SEND_TIME , TT.BIZ_TYPE , TT.MSG_TITLE , COUNTNO
- 37 FROM
- 38 (
- 39 SELECT
- 40 tam.MSG_SUBJECT , tam.MSG_CONTENT , tam.SEND_TIME , tam.BIZ_TYPE , tam.MSG_TITLE , ROW_NUMBER() OVER (PARTITION BY tam.BIZ_TYPE
- 41 ORDER BY
- 42 tam.SEND_TIME DESC) AS ROWNO , COUNT(1) OVER (PARTITION BY tam.BIZ_TYPE
- 43 ORDER BY
- 44 tam.SEND_TIME ASC) AS COUNTNO
- 45 FROM
- 46 MEAB.T_APP_MESSAGE tam
- 47 LEFT JOIN MEAB.T_APP_MESSAGE_SEND tams ON
- 48 tam.MSG_ID = tams.MESSAGE_ID
- 49 WHERE
- 50 tam.MSG_ORIGNAL = 'COL'
- 51 AND tam.MSG_STATUS = '01'
- 52 AND tams.SEND_STATUS = '01'
- 53 AND tams.SEND_OBJECT_NO = '971260') TT
- 54 WHERE
- 55 ROWNO = '1' ) TEMP2 ON
- 56 TEMP2.BIZ_TYPE = TEMP.TEMPLATE_TYPE) TT
- 57 WHERE
- 58 TT.ROWNO = 1
问题描述:
参考上图,加入有A,B,C多个大类型,每个类型下面有多个1,2,3等多个中类,中类下面有很多明细记录(数据在多张表)。要求实现:
1,按照大类分组,显示多个表的某些字段(字段不一定在分组参数),
2,中类分组后,统计每个中类分组的记录数count,
3,然后根据大类的分组求中类记录数和(统计大类的下,满足中类要求的所有记录数)。
运行结果:
按照classId进行分组,关联多个表,统计每个类型下面消息最新的记录,同时统计这类型消息的记录数有多少
关键函数:
- 1 ROW_NUMBER() OVER (PARTITION BY tam.BIZ_TYPE
- 2 ORDER BY
- 3 tam.SEND_TIME DESC) AS ROWNO , COUNT(1) OVER (PARTITION BY tam.BIZ_TYPE
- 4 ORDER BY
- 5 tam.SEND_TIME ASC) AS COUNTNO
ROWNO = '1' 取时间最大
- 1 SUM(TEMP2.COUNTNO) OVER (PARTITION BY TEMP.MSG_CLASS_CODE
- 2 ORDER BY
- 3 TEMP2.SEND_TIME DESC ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS TOTAL, ROW_NUMBER() OVER (PARTITION BY TEMP.CLASS_ID
- 4 ORDER BY
- 5 TEMP2.SEND_TIME ASC) AS ROWNO
相同组内,包含不同类型求和
SQL 实现全字段分组,每组取一条记录,记录满足:组内时间最大,组内不同类型数量求和的更多相关文章
- 【daily】sql分组,每组取N条
数据准备 -- mysql语法 DROP TABLE IF EXISTS `test_group_type`; CREATE TABLE `test_group_type` ( `id` int(11 ...
- MySQL 先按某字段分组,再取每组中前N条记录
按 gpcode每组 取每组 f4 最大的那条记录: 方法一: select * from calcgsdataflash a where gscode = 'LS_F' and ymd >= ...
- MYSQL 按某个字段分组,然后取每组前3条记录
先初始化一些数据,表名为 test ,字段及数据为: SQL执行结果为:每个 uid 都只有 3 条记录. SQL语句为: SELECT * FROM test main WHERE ...
- sql server 按照字段分组 重新设置组序号
SELECT cpr.Id, cpr.CreateTime, cpr.Number FROM CarParkingRegistration cpr SELECT CONCAT(FORMAT(cpr ...
- 【Teradata SQL】一个字段为空即取另外一个字段(连续取4个字段)-case when
目标:如果col1为空则取col2的值,如果col2也为空则取col3的值,如果col3还为则取col4的值,如果四个字段均为空则取默认值 1.数据准备 create multiset table t ...
- sql 多个字段分组,删除重复记录,保留ID最小的一条
IF OBJECT_ID('cardDetail') IS NOT NULL DROP TABLE cardDetail CREATE TABLE cardDetail ( id ,) PRIMARY ...
- sql 以某个字段分组,另一个字段为参加比较的列,取得前n项的值
假设表A有三个字段 { id int: subject varchar(20): socre int: } 语句为 select * from A x where (select count(*) ...
- sql查询一个字段不同值并返回
sql SELECT COUNT(字段),分组字段,SUM(字段),SUM(字段) FROM 表 GROUP BY 分组字段 java EntityWrapper<ProjectEntity&g ...
- SQL AUTO INCREMENT 字段
Auto-increment 会在新记录插入表中时生成一个唯一的数字. AUTO INCREMENT 字段 我们通常希望在每次插入新记录时,自动地创建主键字段的值. 我们可以在表中创建一个 auto- ...
- sql 查询某个字段最长的记录
sql 查询文本字段中值的长度最长的记录 一.函数1.SQL ServerLEN() 函数返回文本字段中值的长度.SELECT LEN(column_name) FROM table_name;2. ...
随机推荐
- 数学建模经验分享会For浙商大管工学院
数学建模介绍 数学建模与数学 数学建模和数学没有必然的关系 一个队里至少有一个数学较好 注重运筹学.统计学这两门课 数学建模做什么 时间:一般每年9月开学三周内 时长:3天3夜 目标:完成一份排版精美 ...
- python解释器下载与安装指导手册
python解释器下载与安装指导手册 1.python解释器 1.1下载地址 1 https://www.python.org/ 1.2.python解释器下载 1.3.python解释器主流版本 p ...
- Linux面试题2:网络IO模型 & IO多路复用
网络IO 先确定一下范围,我们讨论的都是网络IO,现阶段计算机早已经从CPU密集型转换成网络IO密集型,所以网络io的类型对于服务响应而言更重要. 五种IO模型 依据Unix的IO分类,网络IO分为五 ...
- Kafka教程(三):原理及存储
一.思维导图 1.实时更新连接 https://www.mubucm.com/doc/1GRE2U7qYuj 2.思维导图图片 二.具体内容 8.系统架构 架构推导 拓扑结构 多对多 ...
- 2.9:数据交换-csv、Excel、json、爬虫、Tushare获取数据
〇.任务 1. 使用Python基础文件读写函数完成CSV文件的处理: 2. 使用标准CSV库完成CSV文件的处理: 3. 使用Excel库完成Excel文件的处理: 4. Python数据结构和Js ...
- Hexo+Gitee免费搭建静态博客
前言 这是一篇利用 Gitte Pages + hexo 搭建属于自己博客的教程,也是自己这个博客搭建好以后的第一篇文章,搭建的过程中也参考了各路大佬的文章,期间遇到了一些问题,所以写这一篇文章即是记 ...
- windows 、linux文件互传-FileZilla
1.下载免安装FileZilla并解压 2.打开.exe文件 3.点击左上角的文件->站点管理 4.点击新站点->进行配置相应的服务地址信息 5.连接上服务后,若需要将windows中的文 ...
- week_9(异常检测)
Andrew Ng 机器学习笔记 ---By Orangestar Week_9 This week, we will be covering anomaly detection which is w ...
- Mapper的动态代理
可以自动生产接口的实现类 ,所以就不需要再写daoImpl这个实现类了, 直接使用sqlSession.getMapper自动生成实现类 @Before 此注解的目的是为了将@Befoe 作为首先执行 ...
- 【转载】EXCEL VBA 自定义排序的三种方法
何谓自定义排序,就是按指定的顺序对数据源进行排序呗. 共分享了三种方法: 第1种方法是系统自带的OrderCustom,优点是代码简洁,缺点是自定义序列有字符长度限制(255个). 第2种方法是字 ...