-
postgresql数据合并,多条数据合并成1条
2018-10-19 15:35:38对于主表中一条记录,对应明细表中的96条数据,每一条数据相隔15分钟,明细中没96条数据对应主表中的一个日期trade_date,并且每条明细中有一个字段start_time, 即明细中每96条数据中第一条数据中start_time为00:00,...对于主表中一条记录,对应明细表中的96条数据,每一条数据相隔15分钟,明细中没96条数据对应主表中的一个日期trade_date,并且每条明细中有一个字段start_time, 即明细中每96条数据中第一条数据中start_time为00:00,第二条为00:15,第三条为00:30,依次类推,直到23:45 ,现在要将明细表中的96条数据合并成24条,即第一条数据中start_time为00:00,第二条为01:00,第三条为02:00
sql:select max(de.bid_num) report_num,concat(to_char(to_timestamp(concat(ru.trade_date,' ',de.start_time), 'YYYY-MM-DD HH24:mi') :: TIMESTAMP WITHOUT TIME ZONE, 'HH24 '),':00') dd from quote_trade_rule ru LEFT JOIN quote_trade_rule_detail de on ru.trade_rule_id = de.trade_rule_id
WHERE
1 = 1
AND ru.market_id ='a29c81ed-2baf-4c42-881a-f1e64a41e1b0'
AND to_char(ru.trade_date, 'YYYY-MM-DD') ='2018-10-17'
AND ru.rule_type ='2' GROUP BY dd ,trade_date ORDER BY dd,trade_date将10条主表数据对应的960条明细数据合并成如下24条数据:
-
postgresql数据合并,多条数据合并成1条的操作
2021-02-04 17:37:01对于主表中一条记录,对应明细表中的96条数据,每一条数据相隔15分钟,明细中没96条数据对应主表中的一个日期trade_date,并且每条明细中有一个字段start_time, 即明细中每96条数据中第一条数据中start_time为00:00,...对于主表中一条记录,对应明细表中的96条数据,每一条数据相隔15分钟,明细中没96条数据对应主表中的一个日期trade_date,并且每条明细中有一个字段start_time, 即明细中每96条数据中第一条数据中start_time为00:00,
第二条为00:15,第三条为00:30,依次类推,直到23:45 ,现在要将明细表中的96条数据合并成24条,即第一条数据中start_time为00:00,第二条为01:00,第三条为02:00
1
2
3
4
5
6
sql:select max(de.bid_num) report_num,concat(to_char(to_timestamp(concat(ru.trade_date,' ',de.start_time), 'YYYY-MM-DD HH24:mi') :: TIMESTAMP WITHOUT TIME ZONE, 'HH24 '),':00') dd from quote_trade_rule ru LEFT JOIN quote_trade_rule_detail de on ru.trade_rule_id = de.trade_rule_id
WHERE
1 = 1
AND ru.market_id ='a29c81ed-2baf-4c42-881a-f1e64a41e1b0'
AND to_char(ru.trade_date, 'YYYY-MM-DD') ='2018-10-17'
AND ru.rule_type ='2' GROUP BY dd ,trade_date ORDER BY dd,trade_date
将10条主表数据对应的960条明细数据合并成如下24条数据:补充:Postgresql中执行计划的合并连接
Merge Join
通常情况下,散列连接的效果比合并连接好,但如果源数据上有索引,或者结果已经被排过序,在执行排序合并连接时,就不需要排序了,这时合并连接的性能会优于散列连接。下面示例中,people的id字段和dept01的depto字段都有索引,且从索引扫描的数据已经排好序,可以直接走Merge Join:
1
2
3
4
5
6
7
8
highgo=# explain select people.id from people,dept01 where people.id=dept01.deptno;
QUERY PLAN
-------------------------------------------------------------------------------------------------
Merge Join (cost=0.86..64873.59 rows=1048576 width=4)
Merge Cond: (people.id = dept01.deptno)
-> Index Only Scan using people_pkey on people (cost=0.44..303935.44 rows=10000000 width=4)
-> Index Only Scan using idx_deptno on dept01 (cost=0.42..51764.54 rows=1048576 width=2)
(4 行记录)
删除dept01上的索引,会发现执行计划中先对dept01排序后在走Merge Join,示例如下:1
2
3
4
5
6
7
8
9
10
11
highgo=# explain select people.id from people,dept01 where people.id=dept01.deptno;
QUERY PLAN
-------------------------------------------------------------------------------------------------
Merge Join (cost=136112.80..154464.29 rows=1048576 width=4)
Merge Cond: (people.id = dept01.deptno)
-> Index Only Scan using people_pkey on people (cost=0.44..303935.44 rows=10000000 width=4)
-> Materialize (cost=136112.36..141355.24 rows=1048576 width=2)
-> Sort (cost=136112.36..138733.80 rows=1048576 width=2)
Sort Key: dept01.deptno
-> Seq Scan on dept01 (cost=0.00..16918.76 rows=1048576 width=2)
(7 行记录)
上面执行计划中,可看到“Sort Key: dept01.deptno”,这就是对表dept01的id字段进行排序。以上为个人经验,希望能给大家一个参考
-
oracle中SQL分组函数取每组中时间最大的一条数据
2018-07-27 17:12:27最近在做项目中,有一个需求需要查询根据合同的状态去修改对应的业务单对应的状态,合同和业务单存在同一张表中,而且同一个业务A可能存在多条业务单的情况,需要一条SQL查询出每条业务对应的日期最新的那条业务单来...最近在做项目中,有一个需求需要查询根据合同的状态去修改对应的业务单对应的状态,合同和业务单存在同一张表中,而且同一个业务A可能存在多条业务单的情况,需要一条SQL查询出每条业务对应的日期最新的那条业务单来操作。按自己平时的SQL习惯首先想到子查询实现:如下
--其中serviceconstid代表一条业务A,每条业务对应的值不同 select M.* from CM_CONTRACT_INSTANCE M where M.createtime = (select max(t.createtime) from cm_contract_instance t where t.serviceconstid = M.serviceconstid);
但是如上发现一个问题,如果存在业务A下存在两条一模一样createtime的业务单,那这条SQL查出来的数据就会把对应的两条业务单都查出来,但是现在只想取其中一条来操作,这里就不满足需求了!
第二种查询方式如下
-- 结果准确,但是效率较差 SELECT B.* FROM (SELECT A.*, ROW_NUMBER() OVER(partition by A.serviceconstid order by A.createTime desc nulls last) rn FROM CM_CONTRACT_INSTANCE A) B WHERE RN = 1;
第三种方式,使用分组函数group by
select A.* from CM_CONTRACT_INSTANCE A, (select serviceconstid, max(createTime) createTime from CM_CONTRACT_INSTANCE group by serviceconstid) B where A.serviceconstid = B.serviceconstid and A.createTime = B.createTime order by A.serviceconstid;
第四中方式(和第三种类似)
select A.* from CM_CONTRACT_INSTANCE A inner join (select serviceconstid, max(createTime) createTime from CM_CONTRACT_INSTANCE group by serviceconstid) B on A.serviceconstid = B.serviceconstid and A.createTime = B.createTime order by A.serviceconstid;
后面两种方式也会出现第一种那个问题,不过由于系统中数据量不大,执行效率差别不大,后续可以在观察一下!
如果创建时间非常规则,是不会出现相同的情况,所以上面四中方法都可以满足需求。
-
将浏览记录从一维数组型处理成二维数组,删除多条记录后再根据返回的一维数组数据追加到二维数组中
2020-12-06 11:03:10第一次处理数据,将第一条数据放入二维数组中的第一个数组中,循环后续数据,通过每次判断当前数据的产生日期是否跟二维数组中的最后一项数组的最后一项数据的产生日期是否相等 来决定是否要在二维数组后面前端小白,在做浏览记录时,后台返回的数据是按照时间(年月日格式)排列的一维数组,前台需要处理后展示在页面上,选中删除后再返回对应条数的数据,追加到前台数据和页面上,本人在写小程序,所以用小程序代码做示例:
动图展示
数据示例
[ // 模拟后台传递过来的数据格式 { createTime: "2020-12-06", id: "1", }, { createTime: "2020-12-06", id: "2", }, { createTime: "2020-12-05", id: "3", }, …… ]
[ // 处理后的数据格式 [ { "createTime": "2020-12-06", "id": "1", "checked": false }, { "createTime": "2020-12-06", "id": "2", "checked": false }, { "createTime": "2020-12-06", "id": "3", "checked": false }, { "createTime": "2020-12-06", "id": "4", "checked": false } ], [ { "createTime": "2020-12-05", "id": "5", "checked": false }, { "createTime": "2020-12-05", "id": "6", "checked": false }, { "createTime": "2020-12-05", "id": "7", "checked": false }, { "createTime": "2020-12-05", "id": "8", "checked": false }, { "createTime": "2020-12-05", "id": "9", "checked": false } ] ]
整体思路
-
初始请求时 ,将请求到的数据保存到待处理的变量中;
-
第一次处理数据,将待处理数据的第一条数据放入二维数组中的第一个数组中,循环后续数据,通过每次判断当前数据的产生日期是否跟二维数组中的最后一项数组的最后一项数据的产生日期是否相等,来决定是否要在二维数组后面追加一个数组来存放不是同一天的数据,最后将数据追加到二维数组的最后一项数组的最后(刚才已经判断了是不是同一天的数据);
-
点击切换选中状态,每个数据中有一个变量控制着该数据的选中状态,每次点击直接取反;
-
点击删除,遍历出要删除的数据项,记录下并向后台发送,后台删除几条返回几条,前台将未删除项通过一个数组接住;
-
返回数据做拼接,跟第2步中的第一次处理数据逻辑基本相同,循环数据判断是否不是同一天来追加数组,最后前台展示,依次类推;
函数方法介绍
-
处理数组的函数:首次处理和后续拼接处理通用,需判断前台显示的二维数组的长度;
-
点击选中的函数:获取到当前点击的数据,将数据的选中状态取反;
-
点击删除函数:循环用于前台显示的二维数组,选出被选中的保存到待删除的数组中,未被选中的放到另一个新数组中用于替换掉删除前的数据
上代码
Page({ data: { toDealList: [], // 等待去处理的数组 originalList: [ // 模拟首次加载的数据 { createTime: "2020-12-06", id: "1", }, { createTime: "2020-12-06", id: "2", }, { createTime: "2020-12-06", id: "3", }, { createTime: "2020-12-06", id: "4", }, { createTime: "2020-12-05", id: "5", }, { createTime: "2020-12-05", id: "6", }, { createTime: "2020-12-05", id: "7", }, { createTime: "2020-12-05", id: "8", }, { createTime: "2020-12-05", id: "9", }, ], backList: [ // 后续的数据 删多少条返回多少条 直到这个数组中没有数据 { createTime: "2020-12-05", id: "10", }, { createTime: "2020-12-05", id: "11", }, { createTime: "2020-12-05", id: "12", }, { createTime: "2020-12-04", id: "13", }, { createTime: "2020-12-04", id: "14", }, { createTime: "2020-12-04", id: "15", }, { createTime: "2020-12-03", id: "16", }, { createTime: "2020-12-03", id: "17", }, { createTime: "2020-12-03", id: "18", }, ], list: [[]], // 经过处理的 显示在前端的数据 }, // 处理数组的函数 dealFun() { let list = this.data.list let toDealList = this.data.toDealList console.log(toDealList, '待处理数组') // 需保证后台返回的数组长度大于一 if (toDealList.length > 0) { // 将第一个数据放到第一个数组中 // 如果是第一次处理 数组中的第一个数组会没有数据 需要将第一个待处理数据放到里面 并且从第二个开始循环 let isFirst = false if (list[0].length == 0) { isFirst = true list[0][0] = toDealList[0] toDealList[0].checked = false } // 如果是第一次处理 数组中的第一个数组会没有数据 需要将第一个待处理数据放到里面 并且从第二个开始循环 for (let index = (isFirst ? 1 : 0); index < toDealList.length; index++) { toDealList[index].checked = false // 如果当前的日期 不等于前台展示的数组中的最后一个日期了 就代表当前循环项是前一天的数据了 // console.log(list[list.length - 1][list[list.length - 1].length - 1]) if (toDealList[index].createTime != list[list.length - 1][list[list.length - 1].length - 1].createTime) { // 重新添加一个空数组 放前的一天的数据 list.push([]) } // 直接将循环项放到 前端展示的数组中的最后一个数组的最后 list[list.length - 1].push(toDealList[index]) } console.log(list, '循环完成后的数组') } this.setData({ list, }) }, // 点击选中函数 choose(e) { let indexs = e.target.dataset.indexs let index = e.target.dataset.index if (index !== undefined) { let item = this.data.list[indexs][index] item.checked = !item.checked // console.log(item) this.setData({ // [`this.data.list[${indexs}][${index}]`]: this.data.list[indexs][index], // 这样修改 数据已经发生改变 但却不会触发页面更改 是为什么呢 list: this.data.list, }) } }, // 点击删除 delete() { let list = this.data.list let newArr = [] let delArr = [] // 用于记录当前删除的条数 并可用于向后台发送要删除的数据的id // 遍历时直接改变当前遍历的数组 会造成逻辑混乱 // 所以此处用另外一个数组接住(newArr) list.forEach(item => { let arr = [] // 定义数组 一会存放每一天的记录 item.forEach(i => { if (i.checked) { // 选中的代表要删除的 他的id放到待删除的id的数组中 delArr.push(i.id) } else { // 没有被选中的就正常放到新定义的存放每一天的数组中(而不是直接在这截取删除掉该数据 是因为在遍历时直接改变当前遍历的数组会造成逻辑混乱) arr.push(i) } }) // 此处是为了判断防止把某一天的所有数据都删除掉 if (arr.length > 0) { newArr.push(arr) } }) console.log(newArr, '删除完之后的数组(因为是数组(引用型数),打印出来会跟删除完之后处理完的数组是一样的)') this.data.list = newArr // 模拟后台在删除之后返回数据 将返回数据存贮到待处理函数中 let backList = this.data.backList.splice(0, delArr.length) this.data.toDealList = backList this.dealFun() }, onLoad: function () { // 模拟后台第一次返回数据 将返回数据存贮到待处理函数中 this.data.toDealList = this.data.originalList this.dealFun() }, })
GitHub地址:https://github.com/noiceli/DeleteBrowsingHistory
半路出家的前端小白,仅以此文章作为成长记录,如若有任何逻辑或代码可优化方法,欢迎评论交流!
-
-
两表关联,取B表满足条件的第一条数据
2017-10-05 14:27:50例如有两个表goods和prices,商品表中的一条商品信息会对应价格表中的多条价格信息,现在要根据商品表查询其商品对应的可用最新的价格,即要满足价格的生效日期必须在商品上市之前,如果有多个价格,就选取最后生效... -
获取列表中某一元素对应的数量
2020-12-16 11:55:26格式为yyyy-MM-dd HH-mm-ss,一条记录可能对应多个日期,意味着对同一设备的多条维保计划, 解决方法:Collections.frequency(Collection<?> c, Object o) 1.先从数据库中查出所有document,保存到列表中... -
OVER (PARTITION BY) 分组取前n条数据
2019-10-31 10:25:12有一个名为GRADE 的表格记录学生多次考试成绩score,学生id, 考试日期dt等数据,取每个id对应的的最高三次成绩 SELECT * FROM (SELECT *,ROW_NUMBER() OVER(PARTITION BY ID ORDER BY SCORE DESC) RO... -
mysql 按日期拆分成多条记录_【建议收藏】MySQL 三万字精华总结 —分区、分表、分库和主从复制(五)...
2020-12-05 07:13:27九、分区、分表、分库MySQL分区一般情况下我们创建的表对应一组存储文件,使用MyISAM存储引擎时是一个.MYI和.MYD文件,使用Innodb存储引擎时是一个.ibd和.frm(表结构)文件。当数据量较大时(一般千万条记录级别以上)... -
mybatismapper文件多层循环生成大量数据
2018-08-29 19:30:26想生成一年内除节假日外,每一天对应某个实验室的某个时间段的记录表,也就是三个字段,日期yyyy-MM-dd、实验室ID、时间段ID,然后具体的数据记录表引用这个表的主键作为外键 实现思路: ####这样大批量生成不... -
提取一行数据列表_生日/电话一秒提取!高手必备Excel提数据神技
2021-01-07 09:14:38其实提取出生日期并不只有函数操作这一条路,借助一组神级快捷键——Ctrl+E,转眼间就能完成这个“高难度”操作了!1、提取出生日期提取出生日期,多数用户会选择MID函数,但其实只要在第一行先输入一个提取样本... -
动态爬取豆瓣电影中“更多”电影详情数据
2020-12-21 14:36:07爬取需求3对应页面中滚动条向下拉动2000像素后加载出所有电影详情数据,存储到本地json文件中或者相应数据库中 【备注】电影详情数据包括:海报url、电影名称、导演、编剧、主演,类型,语言,上映日期,片长,豆瓣... -
sql查询多条数相加判断是否相等,忘大神帮忙!!!
2020-03-27 19:32:48sign为类型,一个M类型可对应多个S类型。M类型的totalnav值等于多个S类型的totalnav值相加 需要判断整个库表所有M类型和S相加的类型相加是否都相等。并且需要code,和date进行分组 因为数据每天会有相同的code... -
业务指标分析 | 我用一条SQL统计了PV、UV和二跳率
2020-04-13 23:20:12文章目录场景准备业务要求SQL分析 场景准备 假设有一张track_log表,里面有字段:url、guid、...一个sessionid对应一个guid,但是存在对应多个guid的非法数据;url可能为空。 http://www.yhd.com/?union_ref=7&... -
求大神帮忙一个棘手的问题
2017-05-18 08:32:03得到一个日期 就要取出来相对应的price 比如2017-01-03 那么price的值就取21 如果2017-01-12 那么price的值就取32 如果2017-02-14 那么price的值就取44 求大神Oracle查询语句怎么写 或者给个思路也行 -
mysql数据分析学习_mysql数据操作学习
2021-01-19 13:06:45mysql数据的基本操作:增(insert) 删(delete)改(update)查(select);1、增加数据;语法:insert into 表名(字段名1,字段名2) values (数据1,数据2);...一条语句插入多个数据;2、删除数据:语法:... -
C# 最全的日期正则表达式,没有之一
2012-08-07 09:20:40前几天在CSDN多个版块看到需要日期正则的帖子,所以整理了这篇文章,和大家一起讨论交流,如有遗漏或错误的地方,还请大家指正。 日期正则一般是对格式有要求,且数据不是直接由用户输入时使用。因应用场景的不同,... -
mysql concat 日期_mysql group_concat时间用法
2021-01-27 12:54:43第一张表的worksId在第二张表中对应多条数据,需要将每条数据的日期作为结果查询出来,一个作为“初审时间”,另一个作为“复审时间”;可以使用group_concat 和 group by 来进行分组查询;然后在服务端进行分割处理... -
数据库多条件查找如何使用limit和offset来处理分页?
2017-04-18 08:27:21一个地址也可以对应多个日期,但是一个日期和一个地址可以唯一确定一条记录。 我现在是先按照日期 ``` group by ``` 统计,然后分别对每一条日期再来查找对应的地址,这样下来会出现有的日期下边包含多个地址,有... -
写一个存储过程(Oracle数据库)
2014-06-05 12:02:57要求: 写一个Oracle 存储过程, 实现下面功能。 S表结构如下 刷卡流水号 Cardnumber 银行卡号 CardNo ...写一个存储过程, 输入参数是月份(如 201401 ), 完成将数据从 S 表 搬到 T 表的功 能。 -
十万微博数据集.rar
2019-10-27 10:17:03爬取的103个微博用户截止2019年8月发布的所有原创微博,以csv文件存储,每个用户对应一个csv文件。包括48位女性,55位男性,男女性分开存储。包括id、微博正文、微博原始图片URL、原始视频URL、发布日期、发布工具、... -
数据仓库之维度表和事实表
2020-05-30 20:03:57 维表的范围很宽(具有多个属性、列比较多) 跟事实表相比,行数相对较小:通常< 10 万条 内容相对固定:编码表 时间维度表: 2 事实表 事实表中的 每行数据代表一个业务事件(下单、支付、退款、评价等... -
折线图x轴的日期会超出_matplotlib之折线图(代码+解析)
2021-01-12 03:14:25作者:禹棋赢本文推荐一个仓库Plot-Pictures...每一个plot函数对应一条曲线,画多条线的时候调用多个plot函数即可。plot()函数:前两个参数为x、y。x:X轴数据,列表或数组;y:Y轴数据,列表或数组。后面还有很多的... -
1350多个精品易语言模块
2015-07-26 12:21:301350多个精品易语言模块提供下载介绍 1亦思验证码识别1.5免费版.ec 24位转单色位图模块.ec 32张发牌.ec 3D引擎支持库-eOgre.ec 69msn.ec ACCESS 到高级表格.ec Access操作.ec Access数据库压缩修复新建.ec ACCSEE... -
1350多个精品易语言模块提供下载
2011-06-06 17:51:09取句柄对应全路径文件名2.1.ec 取图片尺寸.ec 取声调拼音模块.ec 取声调拼音模 块1.0.ec 取姓名.ec 取快捷方式信息1.2.ec 取拼音带声调1.2.ec 取拼音首个字母.ec 取拼音首 模块.ec 取按键名称模块.ec 取控件或窗口的... -
折线图Y轴显示的数据错误导致图形画错了
2021-01-10 15:46:01只有一条折线图才是完全正确的,我感觉Y轴的数据是几条折线图的数据相加了导致的。这是你demo的图: 只有NewYork Hot的0.68是正确的,另外三个不对 这个是我做的图: 只有当前日期图是对... -
原生JS实现按数据源均分时间点幻灯效果(已封装)
2011-03-13 22:04:00IE下没有阴影及圆角. 实现了根据源数据(样例中是一个JSON数据组)总条数, 均分出时间点以平滑向右动画方式显示在时间线上, 当鼠标划过时间点时, 显示对应的日期及标题. 鼠标划过事件, 充分考虑了用户体验, 当... -
FULL OUTER JOIN关联多个子查询结果值去重
2018-09-07 10:12:32子查询分别对应T1/T2/T3,日期是唯一关联条件,一环扣一环,但是如果出现其中某个表没有某一天的数据,而其他表有,比如某一天T1、T3有结果值,但是T2是个空集,链条就断了,就会同一天出现两条数据即重复日期的结果... -
机房收费系统——上下机
2013-11-05 14:54:24上个月准备考试,机房收费系统就停了,考试完了任务还得继续。说到上下机可能是最令人头疼的,尤其是下机,需要查的表比较多而且数据类型也很多,思路理不清根本无从下手。...然后给正在上机的表中添加一条记录,把
-
MySQL DML 语言(插入、更新与删除数据)
-
echarts 解决显示数量和左侧坐标不一致的问题
-
NORD SK672.1-112MP/4 BRE60 TF F
-
OpenCV3.2的opencv_ffmpeg及ippicv.zip
-
SEC_KMQX10013M-B419_Datas.pdf
-
C语言——从字符串中统计单词的频数
-
Galera 高可用 MySQL 集群(PXC v5.7+Hapro)
-
【布道者】Linux极速入门
-
bat脚本转成exe执行程序
-
python Flask+scrapy+人工智能 实现高性能搜索引擎
-
制作pytorch版的yolov3数据集
-
postwoman.v.1.1.7.zip
-
监控主机基础指标配置及告警
-
电脑端模拟修改ua.zip
-
微信小程序参考文献(精选18篇)
-
Docker玩法 — 小试牛刀
-
MySQL 性能优化(思路拓展及实操)
-
华为1+X——网络系统建设与运维(中级)
-
基于Hadoop 的离线视频处理技术研究与实现
-
access应用的3个开发实例