精华内容
下载资源
问答
  • 对于主表中一条记录,对应明细表中的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条数据:

    展开全文
  • 对于主表中一条记录,对应明细表中的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字段进行排序。

    以上为个人经验,希望能给大家一个参考

    展开全文
  • 最近在做项目中,有一需求需要查询根据合同的状态去修改对应的业务单对应的状态,合同和业务单存在同一张表中,而且同一业务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;

    后面两种方式也会出现第一种那个问题,不过由于系统中数据量不大,执行效率差别不大,后续可以在观察一下!

    如果创建时间非常规则,是不会出现相同的情况,所以上面四中方法都可以满足需求。

    展开全文
  • 第一次处理数据,将第一条数据放入二维数组中的第一数组中,循环后续数据,通过每次判断当前数据的产生日期是否跟二维数组中的最后一项数组的最后一项数据的产生日期是否相等 来决定是否要在二维数组后面

    前端小白,在做浏览记录时,后台返回的数据是按照时间(年月日格式)排列的一维数组,前台需要处理后展示在页面上,选中删除后再返回对应条数的数据,追加到前台数据和页面上,本人在写小程序,所以用小程序代码做示例:

    动图展示

    在这里插入图片描述

    数据示例

    [   // 模拟后台传递过来的数据格式
          {
            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 }
          ]
        ]
    

    整体思路

    1. 初始请求时 ,将请求到的数据保存到待处理的变量中;

    2. 第一次处理数据,将待处理数据的第一条数据放入二维数组中的第一个数组中,循环后续数据,通过每次判断当前数据的产生日期是否跟二维数组中的最后一项数组的最后一项数据的产生日期是否相等,来决定是否要在二维数组后面追加一个数组来存放不是同一天的数据,最后将数据追加到二维数组的最后一项数组的最后(刚才已经判断了是不是同一天的数据);

    3. 点击切换选中状态,每个数据中有一个变量控制着该数据的选中状态,每次点击直接取反;

    4. 点击删除,遍历出要删除的数据项,记录下并向后台发送,后台删除几条返回几条,前台将未删除项通过一个数组接住;

    5. 返回数据做拼接,跟第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

    半路出家的前端小白,仅以此文章作为成长记录,如若有任何逻辑或代码可优化方法,欢迎评论交流!

    展开全文
  • 例如有两个表goods和prices,商品表中的一条商品信息会对应价格表中的多条价格信息,现在要根据商品表查询其商品对应的可用最新的价格,即要满足价格的生效日期必须在商品上市之前,如果有多个价格,就选取最后生效...
  • 格式为yyyy-MM-dd HH-mm-ss,一条记录可能对应多个日期,意味着对同一设备的多条维保计划, 解决方法:Collections.frequency(Collection<?> c, Object o) 1.先从数据库中查出所有document,保存到列表中...
  • 一个名为GRADE 的表格记录学生次考试成绩score,学生id, 考试日期dt等数据,取每id对应的的最高三次成绩 SELECT * FROM (SELECT *,ROW_NUMBER() OVER(PARTITION BY ID ORDER BY SCORE DESC) RO...
  • 九、分区、分表、分库MySQL分区一般情况下我们创建的表对应一组存储文件,使用MyISAM存储引擎时是一个.MYI和.MYD文件,使用Innodb存储引擎时是一个.ibd和.frm(表结构)文件。当数据量较大时(一般千万记录级别以上)...
  • 想生成一年内除节假日外,每对应某个实验室的某个时间段的记录表,也就是三字段,日期yyyy-MM-dd、实验室ID、时间段ID,然后具体的数据记录表引用这表的主键作为外键 实现思路: ####这样大批量生成不...
  • 其实提取出生日期并不只有函数操作这一条路,借助一组神级快捷键——Ctrl+E,转眼间就能完成这“高难度”操作了!1、提取出生日期提取出生日期,多数用户会选择MID函数,但其实只要在第一行先输入一提取样本...
  • 爬取需求3对应页面中滚动向下拉动2000像素后加载出所有电影详情数据,存储到本地json文件中或者相应数据库中 【备注】电影详情数据包括:海报url、电影名称、导演、编剧、主演,类型,语言,上映日期,片长,豆瓣...
  • sign为类型,个M类型可对应多个S类型。M类型的totalnav值等于多个S类型的totalnav值相加 需要判断整个库表所有M类型和S相加的类型相加是否都相等。并且需要code,和date进行分组 因为数据每天会有相同的code...
  • 文章目录场景准备业务要求SQL分析 场景准备 假设有一张track_log表,里面有字段:url、guid、...个sessionid对应个guid,但是存在对应多个guid的非法数据;url可能为空。 http://www.yhd.com/?union_ref=7&...
  • 得到一个日期 就要取出来相对应的price 比如2017-01-03 那么price的值就取21 如果2017-01-12 那么price的值就取32 如果2017-02-14 那么price的值就取44 求大神Oracle查询语句怎么写 或者给个思路也行
  • mysql数据的基本操作:增(insert) 删(delete)改(update)查(select);1、增加数据;语法:insert into 表名(字段名1,字段名2) values (数据1,数据2);...一条语句插入多个数据;2、删除数据:语法:...
  • 前几天在CSDN多个版块看到需要日期正则的帖子,所以整理了这篇文章,和大家一起讨论交流,如有遗漏或错误的地方,还请大家指正。 日期正则一般是对格式有要求,且数据不是直接由用户输入时使用。因应用场景的不同,...
  • 张表的worksId在第二张表中对应多条数据,需要将每条数据日期作为结果查询出来,一个作为“初审时间”,另一个作为“复审时间”;可以使用group_concat 和 group by 来进行分组查询;然后在服务端进行分割处理...
  • 一个地址也可以对应多个日期,但是一个日期和一个地址可以唯一确定一条记录。 我现在是先按照日期 ``` group by ``` 统计,然后分别对每一条日期再来查找对应的地址,这样下来会出现有的日期下边包含多个地址,有...
  • 要求: 写一个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 事实表 事实表中的 每行数据代表个业务事件(下单、支付、退款、评价等...
  • 作者:禹棋赢本文推荐一个仓库Plot-Pictures...每一个plot函数对应一条曲线,画多条线的时候调用多个plot函数即可。plot()函数:前两个参数为x、y。x:X轴数据,列表或数组;y:Y轴数据,列表或数组。后面还有很多的...
  • 1350多个精品易语言模块提供下载介绍 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轴的数据是几条折线图的数据相加了导致的。这是你demo的图: 只有NewYork Hot的0.68是正确的,另外三不对 这是我做的图: 只有当前日期图是对...
  • IE下没有阴影及圆角. 实现了根据源数据(样例中是一个JSON数据组)总数, 均分出时间点以平滑向右动画方式显示在时间线上, 当鼠标划过时间点时, 显示对应日期及标题. 鼠标划过事件, 充分考虑了用户体验, 当...
  • 子查询分别对应T1/T2/T3,日期是唯一关联条件,环扣环,但是如果出现其中某个表没有某天的数据,而其他表有,比如某天T1、T3有结果值,但是T2是空集,链条就断了,就会同天出现两条数据即重复日期的结果...
  • 机房收费系统——上下机

    千次阅读 多人点赞 2013-11-05 14:54:24
    月准备考试,机房收费系统就停了,考试完了任务还得继续。说到上下机可能是最令人头疼的,尤其是下机,需要查的表比较而且数据类型也很,思路理不清根本无从下手。...然后给正在上机的表中添加一条记录,把

空空如也

空空如也

1 2 3 4 5 ... 10
收藏数 190
精华内容 76
关键字:

一条数据对应多个日期