关于mysqlinterval的信息

本篇文章给大家谈谈mysqlinterval,以及对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

Mysql根据分组的时间间隔小于30分钟并分组

可以写出从数据上可以直观看出分组的sql, 另外对于"分组的时间间隔小于30分钟"这句话可能引申出两种理解:

数据先按时间排序, 只要相邻数据DEAL_TIME在30分钟以内则归组, 比如2019-06-06 13:00:00, 2019-06-06 13:05:00和2019-06-06 13:32:00可以归为一组;

数据先按时间排序, 对于理解1的3条数据, 此时2019-06-06 13:32:00和2019-06-06 13:00:00的间隔超过30分钟, 需要另起一组

对于上述两个理解我这边都给出例子, 原理和MySql的rownumber实现有些类似, 排序后加上条件滚动计算, 方案有不足的地方, 1是多一层排序嵌套子查询, 2是结果如果不再嵌套会多出计算过程列

以下为代码:

-- by sleest 2019/06/06 临近分组

-- 制造临时表数据用于验证

DROP TEMPORARY TABLE IF EXISTS TMP_DEAL_TIME;

CREATE TEMPORARY TABLE TMP_DEAL_TIME(DEAL_TIME DATETIME) AS

SELECT DATE_ADD(CURDATE(), INTERVAL 600 * RAND() MINUTE) AS DEAL_TIME

   FROM (SELECT 1 UNION ALL SELECT 2 UNION SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5) A,

        (SELECT 1 UNION ALL SELECT 2 UNION SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5) B;

-- 查看临时表数据

SELECT DEAL_TIME FROM TMP_DEAL_TIME ORDER BY DEAL_TIME;

-- 理解1: 只要相邻时间为指定分钟数以内则聚合

SELECT DEAL_TIME, 

       CASE WHEN @lastDealTime IS NULL THEN @minLevel:=1

            WHEN DEAL_TIME  DATE_ADD(@lastDealTime, INTERVAL 30 MINUTE) 

              THEN @minLevel:=@minLevel+1 END AS COMPUT_CONDITION,

     毁核薯         

       @lastDealTime:=DEAL_TIME AS LAST_DEAL_TIME,

       @minLevel AS GROUP_LEVEL

  FROM (SELECT DEAL_TIME FROM TMP_DEAL_TIME ORDER BY DEAL_TIME) E,

       (SELECT @lastDealTime:=NULL) F,

  氏轿     (SELECT @minLevel:=0) G;

-- 理解2: 只和开始聚合的第一条时间比较, 只有当该条数据处在聚合第一条指定分钟数以内才归组

SELECT DEAL_TIME, 

       CASE WHEN @lastDealTime IS NULL THEN @minLevel:=1

            WHEN DEAL_TIME  DATE_ADD(@lastDealTime, INTERVAL 30 MINUTE) 

              THEN @minLevel:=@minLevel+1 END AS COMPUT_CONDITION,

              

       CASE WHEN @lastDealTime IS NULL THEN @lastDealTime:=DEAL_TIME

            WHEN DEAL_TIME  DATE_ADD(@lastDealTime, INTERVAL 30 MINUTE)

              THEN @lastDealTime:=DEAL_TIME END AS LAST_DEAL_TIME,

       @minLevel AS GROUP_LEVEL

  FROM (SELECT DEAL_TIME FROM TMP_DEAL_TIME ORDER BY DEAL_TIME) E,

       (SELECT 纤者@lastDealTime:=NULL) F,

       (SELECT @minLevel:=0) G;

对于理解1的执行结果如下:

对于理解2的执行结果如下:

后续可以根据结果中的GROUP_LEVEL进行分组显示

如何写mysql的定时任务

转:

mysql的定时任务一般用event(事件)来完成,触发器无法完成。

一、通过mysql的命令行客户端来完成

1、set global event_scheduler =1; //开启event_scheduler

执行这个语句如果出现,可在mysql的配置文档中设置[mysqld]段中添加 event_scheduler=ON

如果重启mysql;这种情况下依然出错岩旅隐,Error Code: 1290. The MySQL server is running with the --event-scheduler=DISABLED

or --skip-grant-tables option so it cannot execute this statement,这个错误是说启动服务器时如果指定了--skip-grant-tables选项,则event_scheduler则自动被设置为DISABLED。命令行或配置文件的设置都会被覆盖。建议重现安装mysql或是修改启动参数粗厅(在系统服务中指定)。

查看event_scheduler状态:show status like '%event%'; 或SELECT @@event_scheduler;

2、CREATE PROCEDURE Mypro() //创建存储过程

BEGIN

update userinfo SET endtime = now() WHERE id = '155';

END;

3、创建event My_enevt,每隔三十秒执行镇备一次

create event if not exists e_test

on schedule every 30 second

on completion preserve

do call Mypro();

4、关闭事件

alter event e_test ON COMPLETION PRESERVE DISABLE;

5、开启事件

alter event e_test ON COMPLETION PRESERVE ENABLE;

语法:

CREATE EVENT [IF NOT EXISTS] event_name ON SCHEDULE schedule [ON COMPLETION

[NOT] PRESERVE] [ENABLE | DISABLE] [COMMENT 'comment'] DO sql_statement;

schedule: AT TIMESTAMP [+ INTERVAL INTERVAL] | EVERY INTERVAL [STARTS TIMESTAMP]

[ENDS TIMESTAMP] INTERVAL: quantity {YEAR | QUARTER | MONTH | DAY | HOUR |

MINUTE | WEEK | SECOND | YEAR_MONTH | DAY_HOUR | DAY_MINUTE | DAY_SECOND |

HOUR_MINUTE | HOUR_SECOND | MINUTE_SECOND}

示例:

1) 首先来看一个简单的例子来演示每秒插入一条记录到数据表

CREATE EVENT e_test_insert ON SCHEDULE EVERY 1 SECOND DO INSERT INTO test.aaa VALUES (CURRENT_TIMESTAMP);

2) 5天后清空test表:

CREATE EVENT e_test ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 5 DAY DO TRUNCATE TABLE test.aaa;

3) 2013年7月20日12点整清空test表:

CREATE EVENT e_test ON SCHEDULE AT TIMESTAMP '2013-07-20 12:00:00' DOTRUNCATE TABLE test.aaa;

4) 每天定时清空test表:

CREATE EVENT e_test ON SCHEDULE EVERY 1 DAY DO TRUNCATE TABLE test.aaa;

5) 5天后开启每天定时清空test表:

CREATE EVENT e_test ON SCHEDULE EVERY 1 DAY STARTS CURRENT_TIMESTAMP + INTERVAL 5 DAY DO TRUNCATE TABLE test.aaa;

6) 每天定时清空test表,5天后停止执行:

CREATE EVENT e_test ON SCHEDULE EVERY 1 DAY ENDS CURRENT_TIMESTAMP + INTERVAL 5 DAY DO TRUNCATE TABLE test.aaa;

7) 5天后开启每天定时清空test表,一个月后停止执行:

CREATE EVENT e_test ON SCHEDULE EVERY 1 DAY STARTS CURRENT_TIMESTAMP +

INTERVAL 5 DAY ENDS CURRENT_TIMESTAMP + INTERVAL 1 MONTH DO TRUNCATE TABLE test.aaa;

[ON COMPLETION [NOT] PRESERVE]可以设置这个事件是执行一次还是持久执行,默认为NOT PRESERVE

8)

每天定时清空test表(只执行一次,任务完成后就终止该事件):

CREATE EVENT e_test ON SCHEDULE EVERY 1 DAY ON COMPLETION NOT PRESERVE DO TRUNCATE TABLE test.aaa;

[COMMENT

comment]可以给该事件加上注释

2修改事件(ALTER EVENT)

ALTER EVENT event_name [ON SCHEDULE schedule] [RENAME TO new_event_name]

[ON COMPLETION [NOT] PRESERVE] [COMMENT 'comment'] [ENABLE | DISABLE] [DO

sql_statement]

1) 临时关闭事件

ALTER EVENT e_test DISABLE;

2) 开启事件

ALTER EVENT e_test ENABLE;

3) 将每天清空test表改为5天清空一次:

ALTER EVENT e_test ON SCHEDULE EVERY 5 DAY;

3删除事件(DROP EVENT)

语法很简单,如下所示:

DROP EVENT [IF EXISTS] event_name

例如删除前面创建的e_test事件

DROP EVENT e_test;

当然前提是这个事件存在,否则会产生ERROR 1513 (HY000): Unknown event错误,因此最好加上IF EXISTS

DROP EVENT IF EXISTS e_test;

二、使用第三方工具来创建,推荐使用HeidiSQL网站:,免费的开源客户端,由德国程序员Ansgar Becker开发;这个软件的界面有中文界面。

打开HeidiSQL,右键单击表名,选创建新的的菜单,再选事件即可,很方便,我们可以编辑事件的时间设置和代码。这里定义人填写root@localhost。

INTERVAL 是mysql的关键字吗

INTERVAL是关键差芹枣字,常用到如以下语法

select interval(6,1,2,3,4,5,6,7,8,9,10); -- 返回比6大的位置

select now()-interval 24 hour 虚拆 -- 时间比较: 返回 前一天

select date_add(now(),interval 1 day);  -- 现在时间的后首闷一天

[img]

怎样在MySQL中操作日期

select curDate(); #获取当前日期select curTime(); #获取当前时仿腊间select now(); #获取当前日期+时间 列举1个天数加减的例子,其他的看英文意思就可以理解了 select date_add(now(), interval 1 day); #当前日期天数+1 select date_add(now(), interval -1 day); #当前日期天数-1 select date_add(now(), interval 1 hour); select date_add(now(), interval 1 minute); select date_add(now(), interval 1 second); select date_add(now(), interval 1 microsecond); select date_add(now(), interval 1 week); select date_add(now(), interval 1 month); select date_add(now(), interval 1 quarter); select date_add(now(), interval 1 year); date_sub与date_add功能整合相反 select date_sub(now(), interval 1 day); #当前备档滑日期天数-select date_sub(now(), interval -1 day); #当前日期天数+select date_sub(now(), interval 1 hour); select date_sub(now(), interval 1 minute)select date_sub(now(), interval 1 second)select date_sub(now(), interval 1 microsecond)select date_sub(now(), interval 1 week)select date_sub(now(), interval 1 month)select date_sub(now(), interval 1 quarter)select date_sub(now(), interval 1 year); datediff函数计算两个日期间隔的天数 datediff(date1, date2); #date1 - date2 timediff函数蠢陵计算两个时间间隔 timediff(time1, time2); #time1 - time2 time1和time2的格式必须要一样,返回时间差 str_to_date(str, format) 字符串转换为日期 select str_to_date('11/09/2014', '%m/%d/%Y'); -- 2014-11-09 步骤阅读

关于mysqlinterval和的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

标签列表