• SQL——查询一段时间内每天的数据,按天将数据封装进行封存


    DROP TABLE IF EXISTS `T_ROTA_RECORD`;
    
    CREATE TABLE `T_ROTA_RECORD` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `duty_date` date NOT NULL DEFAULT '0000-00-00' COMMENT '值班日期',
      `duty_turn` tinyint(4) NOT NULL DEFAULT '0' COMMENT '值班班次,0:全天班 1:早班 2:中班 3:晚班',
      `provider_id` int(11) DEFAULT '0' COMMENT '值班对象ID,T_ROTA_PROVIDER.id',
      `is_delete` tinyint(2) NOT NULL DEFAULT '0' COMMENT '是否被删除:0-否;1-是',
      `org_code` varchar(128) DEFAULT '""' COMMENT '企业或部门编码',
      `is_noticed` tinyint(2) NOT NULL DEFAULT '0' COMMENT '是否已经通知(0:否,1:是)',
      `update_time` datetime NOT NULL DEFAULT '0000-00-00 00:00:00' COMMENT '数据更新时间,默认为当前时间',
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COMMENT='值班记录表';
    
    /*Data for the table `T_ROTA_RECORD` */
    
    insert  into `T_ROTA_RECORD`(`id`,`duty_date`,`duty_turn`,`provider_id`,`is_delete`,`org_code`,`is_noticed`,`update_time`) values 
    
    (1,'2018-05-25',1,1,0,'330100.000002.001',0,'2018-05-25 11:00:24'),
    
    (2,'2018-05-25',2,2,0,'330100.000002.001',0,'2018-05-25 11:00:53'),
    
    (3,'2018-05-25',3,3,0,'330100.000002.001',0,'2018-05-25 11:01:28'),
    
    (4,'2018-05-26',1,2,0,'330100.000002.001',0,'2018-05-25 11:02:25'),
    
    (5,'2018-05-27',1,1,0,'330100.000002.001',0,'2018-05-25 11:02:52'),
    
    (6,'2018-05-25',1,4,0,'330100.000002.002',0,'2018-05-25 11:09:34'),
    
    (7,'2018-05-26',1,5,0,'330100.000002.002',0,'0000-00-00 00:00:00'),
    
    (8,'2018-05-26',2,4,0,'330100.000002.002',0,'2018-05-25 11:10:18'),
    
    (9,'2018-05-26',3,6,0,'330100.000002.002',0,'2018-05-25 11:10:44'),
    
    (10,'2018-05-27',0,4,0,'330100.000002.002',0,'0000-00-00 00:00:00');

    查询一段时间内每天的数据,按天将数据封装进行封存,同一天的数据封装成list,如何实现呢?

    抽象成一对多的关系,即同一天对应多条数据,同一天必须保证是同一条数据。

    SELECT
      a.`id`,
      a.`duty_date`,
      b.`duty_turn`,
      b.provider_id,
      b.is_delete,
      b.org_code,
      b.is_noticed,
      b.update_time
    FROM
      (SELECT
        id,
        duty_date
      FROM
        T_ROTA_RECORD
      WHERE is_delete = 0
     --   AND org_code = '330100.000002.001'
      GROUP BY duty_date) a
      LEFT JOIN
        (SELECT
          duty_date,
          duty_turn,
          provider_id,
          is_delete,
          org_code,
          is_noticed,
          update_time
        FROM
          T_ROTA_RECORD
        WHERE is_delete = 0
     --     AND org_code = '330100.000002.001'
        GROUP BY duty_date,
          duty_turn ) b
        ON a.`duty_date` = b.`duty_date`
        
        WHERE   b.org_code = '330100.000002.001'
         AND a.duty_date >= '2018-05-25'
         AND a.duty_date <= '2018-05-28'
        -- and b.provider_id = 1
        ORDER BY  a.`duty_date`, b.duty_turn
        
        

    这里的a.id 不可省略,只有加上才能表示同一天是同一条数据。

  • 相关阅读:
    JDBC事务处理
    JDBC之LOB数据类型
    使用JDBC驱动程序处理元数据
    JDBC之PreparedStatement
    JDBC主要API学习总结
    JDBC简介
    ForkJoinPool 分支/合并框架
    线程池
    线程八锁
    jQuery中的事件冒泡
  • 原文地址:https://www.cnblogs.com/thiaoqueen/p/9103143.html
Copyright © 2020-2023  润新知