精华内容
下载资源
问答
  • 说明:A的id和B的id可能存在不完全相符,A中每个id的同一天时间记录可能存在多条记录 B的每个id一个月的每天都有一条记录(比如每个id在9月有30天记录),datea的时间要求<'8:30:00' dateb的时间要求&...

    把A表中的时间取一天中最大、最小的时间更新到B表中,要求A表和B表中的ID和 date要关联.
    说明:A表的id和B表的id可能存在不完全相符,A表中每个id的同一天的时间记录可能存在多条记录
    B表的每个id一个月的每天都有一条记录(比如每个id在9月有30天记录),datea的时间要求<'8:30:00' dateb的时间要求>'18:30:00'

    供参考的SQL如下: 
    update B
    set B.datea = isnull(s.minDate, B.datea), B.dateb = isnull(s.maxDate, B.dateb)
    from (
        -- 按id, dateValue(即日期值e799bee5baa6e58685e5aeb931333335333733) 取得最大值,最小值
        select s0.id, s0.dateValue, max(s0.date) as maxDate, min(s0.date) as minDate
        from (
            -- 将A.date的值转成不带时分秒的日期值dateValue,并计算出当日的秒数值valSeconds 
            select A.id, A.date, convert(datetime, convert(nvarchar(30), A.date, 101), 101) as dateValue, datepart(hh, A.date) * 3600 + datepart(mi, A.date) * 60 + datepart(ss, a.date) as valSeconds
            from A 
         ) s0
        -- 将数据值限制在8:30以前, 18:30之后, 用秒数值比较的结果,精确到秒数  
        where (s0.valSeconds < 8 * 3600 + 30 * 60 or s0.valSeconds > 18 * 3600 + 30 * 60) 
        group by s0.id, s0.dateValue     
    ) s
    where B.ID = s.id and B.date = s.date

     

    展开全文
  • 给出所有学生一天的考勤记录,请统计每个学生在实验室工作的时间,并按照工作时间从长到短给出一天的统计,工作时间相同时按编号从小到大排序。 输入说明 输入的第一行包含一个整数n,表示考勤记录条数。1≤n≤...

    问题描述
    实验室使用考勤系统对学生进行考勤。考勤系统会记录下每个学生一天内每次进出实验室的时间。
    每位学生有一个唯一编号,每条考勤记录包括学生的编号,进入时间、离开时间。
    给出所有学生一天的考勤记录,请统计每个学生在实验室工作的时间,并按照工作时间从长到短给出一天的统计表,工作时间相同时按编号从小到大排序。

    输入说明
    输入的第一行包含一个整数n,表示考勤记录条数。1≤n≤100,学生的编号为不超过100的正整数。
    接下来是n行,每行是一条考勤记录,每条记录包括学生编号k,进入时间t1和离开时间t2三项。
    t1和t2格式为“hh:mm”,即两位数表示的小时和两位数表示的分钟。例如14:20表示下午两点二十分,所有时间均为24小时制,且均为同一天内的时间。

    输出说明
    输出按工作时间和学生编号排序的统计表。统计表包含若干行,每行为一个学生的出勤记录,由学生编号和总工作时间构成,总工作时间以分钟为单位。

    输入样例
    5
    3 08:00 11:50
    1 09:00 12:00
    3 13:50 17:30
    1 14:00 18:00
    2 17:00 24:00

    输出样例
    3 450
    1 420
    2 420

    这道题目首先要求计算工作时间,需要注意的是当输入的学号相同时应对时间进行累加,而不能理所当然的赋值给另一个人。而这也是该题的一个难点。
    我们的代码及详细注释如下。

    #include<stdio.h>
    typedef struct{						//建立结构体,储存学生的学号及工作时间
        int biaohao;
        int time ;
    }Student;
    int main()
    {
        int flag = 0 ;			
        int m;
        scanf("%d",&m);
        int cnt = 0;				//cnt为当前已经出现的学生的个数
        Student stu[m];				//建立结构体数组
        int i,  j;
        for(i =0 ; i< m ;i++)		//初始化结构体数组。
        {
            stu[i].time = 0;
            stu[i].biaohao = -1;		
        }
        for(i = 0;  i< m ;i++)
        {
            int xuehao,h1,m1,m2,h2;				//为了使输入的学号与结构体中的学号便于区分,我们分别用xuehao
           										//以及 stu[i].biaohao   来进行区别
            scanf("%d %d:%d %d:%d",&xuehao,&h1,&m1,&h2,&m2);	//输入数据
            for(j = 0 ; j< m;  j++)
            {
                if(xuehao == stu[j].biaohao)			//遍历我们的结构体数组。如果该学号之前已经出现过,
               				 							//则进行时间的累加
                {
                    int t = m2 -m1 ;						
                    if(t<0)   {t = 60 + t ;     h2 = h2 - 1 ;  }  		
                    stu[j].time +=((h2-h1)*60 + t);       //进行时间的计算并累加
                    flag = 1;					//flag 为1 ,证明我们的数据已经被利用
                }
            }
            if(flag == 0)				//flag为0,说明这个学号在之前并未出现过,
            							//我们需要将该时间赋给一个新的成员
                {
                    stu[cnt].biaohao = xuehao;      //将该学号赋给新的一个人
                    int t = m2 -m1 ;
                    if(t<0)   {t = 60+t;     h2-=1;     }
                    stu[cnt++].time +=((h2-h1)*60 + t);    	//将时间赋给这个人
                }
            flag = 0 ;                      	//初始化flag.为进行下一个人的判断做准备
        }
        //----------------------------------------开始进行排序------------------------------------
        for(i = 0 ; i < m-1;  i++)
        {
            for(j = i+1 ; j< m;j ++)
            {
                if(stu[i].time!=0&&stu[j].time!=0)		//排除为 0 数据
                 {
                        if(stu[i].time<stu[j].time)			//进行时间的比较
                        {
                            Student t = stu[i]; stu[i] = stu[j] ; stu[j] = t ;
                        }
                        if(stu[i].time==stu[j].time)		//时间相同,我们进行学号的比较
                        {
                            if(stu[i].biaohao>stu[j].biaohao)
                            {
                                Student t = stu[i]; stu[i] = stu[j] ; stu[j] = t ;
                            }
                        }
                 }
            }
        }
        //------------------------------排序完成,接下来按照我们的顺序输出------------------------------------
        for(i = 0 ; i<  m ; i++)					
        {
                if(stu[i].time!=0)											//注意排除 为0 项
                printf("%d %d\n",stu[i].biaohao,stu[i].time);
        }
    }
    
    

    这道题目的难点就在于若输入的学号在之前已经出现过,我们需要将时间累加给同一个人,反之我们要将时间赋给一个新的人。搞清楚这一点,这道题目自然迎刃而解。

    展开全文
  • id uid date 1 1 2014-01-01 2 2 2014-01-01 3 1 2014-01-01 ...SQL中获取时间段里每一天的数据,如果表里没有这一天记录数据就为0 不知道那位大神能帮我解决这个问题,小弟不胜感激。
  • 因单数据太大, 需要时间分区 分区字段 pay_out_date 按天分 要求自动创建 1. 创建分区 MYSQL的分区字段,必须包含在主键字段内 常见错误提示 错误提示:#1503 A PRIMARY KEY MUST INCLUDE ALL COLUMNS ...

    因单表数据太大, 需要表按时间分区 分区字段 pay_out_date 按天分 要求自动创建

    1. 创建分区表

    MYSQL的分区字段,必须包含在主键字段内

    常见错误提示

    错误提示:#1503
    A PRIMARY KEY MUST INCLUDE ALL COLUMNS IN THE TABLE'S PARTITIONING FUNCTION
    MySQL主键的限制,每一个分区表中的公式中的列,必须在主键/unique key 中包括

    CREATE TABLE `game_bet` (
       `id` BIGINT(20) NOT NULL AUTO_INCREMENT,
       `create_date` DATETIME(6) DEFAULT NULL,
       `create_person` VARCHAR(50) DEFAULT NULL,
       `update_date` DATETIME(6) DEFAULT NULL,
       `update_person` VARCHAR(50) DEFAULT NULL,
       `bet_code` VARCHAR(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
       `agent_code` VARCHAR(50) NOT NULL,
       `game_id` INT(11) NOT NULL,
       `game_name` VARCHAR(50) DEFAULT NULL,
       `room_code` VARCHAR(11) NOT NULL,
       `desk_code` VARCHAR(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
       `user_id` BIGINT(20) NOT NULL,
       `user_name` VARCHAR(50) NOT NULL,
       `round_code` VARCHAR(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,
       `commission` DECIMAL(18,3) NOT NULL,
       `bet_amount` DECIMAL(18,3) NOT NULL,
       `valid_bet_amount` DECIMAL(18,3) NOT NULL,
       `pay_out` DECIMAL(18,3) NOT NULL,
       `win_amount` DECIMAL(18,3) NOT NULL,
       `settle_flag` INT(11) NOT NULL,
       `device` INT(11) NOT NULL,
       `login_ip` VARCHAR(50) NOT NULL,
       `currency` VARCHAR(50) NOT NULL,
       `bet_date` DATETIME(6) DEFAULT NULL,
       `pay_out_date` DATETIME(6) NOT NULL DEFAULT '1970-01-01 00:00:00.000000',
       `result` VARCHAR(50) NOT NULL,
       PRIMARY KEY (`id`,`pay_out_date`),
       KEY `IX_game_bet_agent_code` (`agent_code`),
       KEY `IX_game_bet_create_date` (`create_date`),
       KEY `IX_game_bet_device` (`device`),
       KEY `IX_game_bet_game_id` (`game_id`),
       KEY `IX_game_bet_pay_out_date` (`pay_out_date`),
       KEY `IX_game_bet_round` (`round_code`)
    ) ENGINE=INNODB DEFAULT CHARSET=utf8
     PARTITION BY RANGE (to_days(`pay_out_date`))
    (PARTITION p20190421 VALUES LESS THAN (737535) ENGINE = InnoDB) 

    2. 创建每日新增表分区的存储过程

    DELIMITER $$

    USE `poker_games`$$

    DROP PROCEDURE IF EXISTS `time_partition_procedure`$$

    CREATE DEFINER=`root`@`%` PROCEDURE `time_partition_procedure`()
    BEGIN

    SELECT REPLACE(b.partition_name,'p','') INTO @in_date FROM information_schema.PARTITIONS b WHERE b.table_name ='game_bet' ORDER BY b.partition_ordinal_position DESC LIMIT 1;

    SET @max_date= DATE_ADD(@in_date,INTERVAL 1 DAY)+0 ;

    SET @date= DATE_ADD(@in_date,INTERVAL 1 DAY)+0 ;

    SET @sql=CONCAT('ALTER TABLE game_bet add PARTITION (PARTITION p',@date,' VALUES LESS THAN (TO_DAYS(''',@max_date,''')));');

    SELECT @sql;
    SELECT @max_date;

    PREPARE strsql FROM @sql;    #预执行sql

    EXECUTE strsql;           #执行sql 

    DEALLOCATE PREPARE strsql;   #释放sql

    COMMIT;

    END$$

    DELIMITER ;

    3. 创建每天执行存储的事件 明天凌晨3点执行

    DELIMITER $$

    CREATE EVENT `poker_games`.`time_partition_event`
    ON SCHEDULE EVERY 1 DAY STARTS DATE_ADD(CURRENT_DATE+1,INTERVAL 3 HOUR)
    ON COMPLETION PRESERVE
    ENABLE DO
    BEGIN
        CALL time_partition_procedure();
    END; 

    展开全文
  • 因单数据太大, 需要时间分区 分区字段 pay_out_date 按天分 要求自动创建1. 创建分区MYSQL的分区字段,必须包含在主键字段内常见错误提示错误提示:#1503A PRIMARY KEY MUST INCLUDE ALL COLUMNS IN THE ...

    因单表数据太大, 需要表按时间分区 分区字段 pay_out_date 按天分 要求自动创建

    1. 创建分区表

    MYSQL的分区字段,必须包含在主键字段内

    常见错误提示

    错误提示:#1503

    A PRIMARY KEY MUST INCLUDE ALL COLUMNS IN THE TABLE'S PARTITIONING FUNCTION

    MySQL主键的限制,每一个分区表中的公式中的列,必须在主键/unique key 中包括

    CREATE TABLE `game_bet` (

    `id` BIGINT(20) NOT NULL AUTO_INCREMENT,

    `create_date` DATETIME(6) DEFAULT NULL,

    `create_person` VARCHAR(50) DEFAULT NULL,

    `update_date` DATETIME(6) DEFAULT NULL,

    `update_person` VARCHAR(50) DEFAULT NULL,

    `bet_code` VARCHAR(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,

    `agent_code` VARCHAR(50) NOT NULL,

    `game_id` INT(11) NOT NULL,

    `game_name` VARCHAR(50) DEFAULT NULL,

    `room_code` VARCHAR(11) NOT NULL,

    `desk_code` VARCHAR(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,

    `user_id` BIGINT(20) NOT NULL,

    `user_name` VARCHAR(50) NOT NULL,

    `round_code` VARCHAR(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,

    `commission` DECIMAL(18,3) NOT NULL,

    `bet_amount` DECIMAL(18,3) NOT NULL,

    `valid_bet_amount` DECIMAL(18,3) NOT NULL,

    `pay_out` DECIMAL(18,3) NOT NULL,

    `win_amount` DECIMAL(18,3) NOT NULL,

    `settle_flag` INT(11) NOT NULL,

    `device` INT(11) NOT NULL,

    `login_ip` VARCHAR(50) NOT NULL,

    `currency` VARCHAR(50) NOT NULL,

    `bet_date` DATETIME(6) DEFAULT NULL,

    `pay_out_date` DATETIME(6) NOT NULL DEFAULT '1970-01-01 00:00:00.000000',

    `result` VARCHAR(50) NOT NULL,

    PRIMARY KEY (`id`,`pay_out_date`),

    KEY `IX_game_bet_agent_code` (`agent_code`),

    KEY `IX_game_bet_create_date` (`create_date`),

    KEY `IX_game_bet_device` (`device`),

    KEY `IX_game_bet_game_id` (`game_id`),

    KEY `IX_game_bet_pay_out_date` (`pay_out_date`),

    KEY `IX_game_bet_round` (`round_code`)

    ) ENGINE=INNODB DEFAULT CHARSET=utf8

    PARTITION BY RANGE (to_days(`pay_out_date`))

    (PARTITION p20190421 VALUES LESS THAN (737535) ENGINE = InnoDB)

    2. 创建每日新增表分区的存储过程

    DELIMITER $$

    USE `poker_games`$$

    DROP PROCEDURE IF EXISTS `time_partition_procedure`$$

    CREATE DEFINER=`root`@`%` PROCEDURE `time_partition_procedure`()

    BEGIN

    SELECT REPLACE(b.partition_name,'p','') INTO @in_date FROM information_schema.PARTITIONS b WHERE b.table_name ='game_bet' ORDER BY b.partition_ordinal_position DESC LIMIT 1;

    SET @max_date= DATE_ADD(@in_date,INTERVAL 1 DAY)+0 ;

    SET @date= DATE_ADD(@in_date,INTERVAL 1 DAY)+0 ;

    SET @sql=CONCAT('ALTER TABLE game_bet add PARTITION (PARTITION p',@date,' VALUES LESS THAN (TO_DAYS(''',@max_date,''')));');

    SELECT @sql;

    SELECT @max_date;

    PREPARE strsql FROM @sql;    #预执行sql

    EXECUTE strsql;           #执行sql

    DEALLOCATE PREPARE strsql;   #释放sql

    COMMIT;

    END$$

    DELIMITER ;

    3. 创建每天执行存储的事件 明天凌晨3点执行

    DELIMITER $$

    CREATE EVENT `poker_games`.`time_partition_event`

    ON SCHEDULE EVERY 1 DAY STARTS DATE_ADD(CURRENT_DATE+1,INTERVAL 3 HOUR)

    ON COMPLETION PRESERVE

    ENABLE DO

    BEGIN

    CALL time_partition_procedure();

    END;

    展开全文
  •  (默背下代码添加了个 tableView,重新手打次,由于时间限制不再进行文字描述。)  这里主要记录一点,把定时器加到 runloop 中,模式为 commonModes: 1 RunLoop.current.add(self.time, forMode: ....
  • 作者:威威单温柔的小猪,终身思考者每一天都是生命的最后一天。——威威单2019年2月21日,看了电影《时间规划局》,向大家推荐。电影背景《时间规划局》描述了人类以时间为货币单位,所有的事物都以时间进行交换。...
  • 因单数据太大, 需要时间分区 分区字段 pay_out_date 按天分 要求自动创建1. 创建分区MYSQL的分区字段,必须包含在主键字段内常见错误提示错误提示:#1503A PRIMARY KEY MUST INCLUDE ALL COLUMNS IN THE ...
  • 有时在oracle中可能会需要这样的处理,比如展厅日志,记录了如下信息:姓名、登记时间,因一天内可能存在同一个人多次登记的情况(这里为了简单没有考虑重名的问题),所以需要最新的一次登记记录,这就要用到去重处理...
  • (1) 基准时间中创建时间最早的数据,然后以这个时间为基准往前三内或者七内的最新数据 SELECT * from datetest WHERE day > (SELECT DATE_ADD(MAX(day),INTERVAL -7 DAY) FROM datetest) ORDER BY day DESC;...
  • 从网上查了条,但这是 以当前时间为起点取最近几记录select * from rewards where DATE_SUB(CURDATE(), INTERVAL 4 DAY)<= date(day)="" order="" by="" day="" desc=""回复讨论(解决方案)那么你说参照点应...
  • 但删除的方式并不是行的删除,而是将组成的数据页释放,将组成的相关页释放的操作交给个后台的线程进行队列处理的过程被称为deferred-drop。使用后台线程处理deferred-drop的好处是这个操作不会使得其...
  • 【查询,以时间进行分组统计,每天的记录数量】 具体查询需求,就可以根据自己的业务进行每日数据统计了 参数:pageIndex,就是页码了,页大小也是可以设置的,在这里只是固定查询七 参数:pageSize,每页...
  • 话说有文章article,存储文章的添加文章的时间是add_time字段,该字段为int(5)类型的,现需要查询今天添加的文章总数并且按照时间从大到小排序,则查询语句如下:1 select * from `article` where date_format...
  • select ORA_ROWSCN from tablename order by 1 desc--比如值为XX --ORA_ROWSCN 缺省是数据块级别的,也就是个数据块内的所有记录都是个ORA_ROWSCN,数据块内...
  • 2014年寒假日常记录表(2014.1.9—2.23,45天) 日期 周次 寒假时间 编程 日记 阅读 备注 2014.1.9 周四 前一天 完成 完成 (完成了一半的图形输出题) ...
  • 现需要对表中所有这种开始时间与结束时间不在同一天记录进行拆分,时间跨度几天就拆分成几条: 以上为实现后的效果图,由于之前对Oracle的游标不太了解,请教了组长,后来也仔细看了下 游标的使用,这个实现也并...
  • Java学习路线:三个月,90,12集每天。15.12.03-16.03.01 mysql学习规划:个月。15.12.03-16.01.01 scala学习规划:个月。15.12.03-16.01.01 hive学习规划:两个月。15.12.03-16.02.01 ...
  • 话说有文章article,存储文章的添加文章的时间是add_time字段,该字段为int(5)类型的,现需要查询今天添加的文章总数并且按照时间从大到小排序,则查询语句如下:1 select * from `article` where date_format...
  • 20xx年1月党员学习记录表篇1 在组织的关怀老党员的熏陶,我的思想不断得到了磨练和提高,现向党组织汇报一下最近时间以来我的工作、学习及对党的思想理论最新感悟。 7月份我的工作和学习都比较紧任务比较重,...
  • 星期时间记录

    2013-05-18 22:05:38
    ------------------------------------------时间记录表(做了6)----------------------------------------------------------- 专业学习 阅读 统计,更博客写日记,整笔记 吃饭 睡觉 情感 娱乐...
  • 现需要对表中所有这种开始时间与结束时间不在同一天记录进行拆分,时间跨度几天就拆分成几条: 以上为实现后的效果图,由于之前对Oracle的游标不太了解,请教了组长,后来也仔细看了下 游标的使用,这个实现也...
  • 记录自己被坑的一天

    千次阅读 2019-01-12 20:52:54
    之前有通过POI3.9做过个导出,但是一直存在个问题,Excel能下载,但是打开始终提示: 这个问题一直困扰着我,没有时间解决,所以一直放在哪里。 这次没办法了,就只能解决这个问题。 开始,我以为是我代码...
  • 作者:jiaxin来源:https://www.cnblogs.com/YangJiaXin/p/10828244.html# 背景XX实例(从...要追延迟来保证主从数据的一致性)XX实例的慢查询数量最多(执行时间超过1s的sql会被记录),XX应用那方每天晚上在做删...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,176
精华内容 470
关键字:

一天时间记录表