小艾咖啡 2018-12-26 23:00 采纳率: 0%
浏览 1050
已采纳

MySql分组条件查询,非常急,折腾两天了,非常感谢。

如图,MySql5.5版本,实际表中ID并不是自增长的,而是UUID生成的。需求:根据时间分组查询,分组规则可以是1分钟,也可以是5分钟或10分钟为一组,时间不能写死,要每一组第一个时间点的开盘价;最后一个时间点的收盘价;这组内的最低价;这1组内的最高价。比如我要查5分钟一组的数据,把时间改成5就行了,具体需要的数据是:这5分钟(如:5分00秒——10分59秒这个时间段,时间间隔是随机的,并不一定是第0秒,也不一定是第59秒,反正是在这5分钟内的)内第一个时间点的开盘价;最后一个时间点的收盘价;这1分钟内的最低价;这1分钟内的最高价;最后一个时间点的时间(时间格式:年-月-日 时:分)。过后悬赏,没暂时充值,呵呵。
图片说明

  • 写回答

1条回答

  • 路漫漫兮其修远兮 2018-12-27 02:27
    关注

    说一下我的思路,
    1. 以时间分组,肯定需要最小的时间作为起始界限。
    2. 查询到最小的时间。
    3. 用其余的时间减去最小的时间,获得他们的时间差。
    4. 用时间差去除以你你需要分段的时间内容,这里比如说是5,然后对他们结果取整
    ,0表示他们都是和开始时间相差5分钟以内,1表示和开始时间相差10分钟以内。。。

            SELECT
        *
        FROM
            tb_order AS c 
        GROUP BY
            (
            SELECT
                FLOOR( ( UNIX_TIMESTAMP( c.createDateTime ) - ( select UNIX_TIMESTAMP(temp.createDateTime)  FROM
                tb_order AS temp 
            ORDER BY
                temp.createDateTime 
                LIMIT 1  ) ) / ( 5 * 60 ) ) 
    
            ) 
        ORDER BY
            c.createDateTime;
    
    

    这个是我自己表写的sql,其中FLOOR是取整,舍弃小数部分,UNIX_TIMESTAMP 是转为秒数,所以5*60也是要分组的秒数。

    然后你自己的sql,你对应的把表明,字段,别名换了就可以,都是mysql。

    若还有别的问题我们在沟通。如果对你有用,请采纳,攒点声望

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 对于相关问题的求解与代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料