MySQL按周统计 WEEK 实例

MySQL按周统计每周数据总和,用到了WEEK,subdate,date_format,date_sub,date_add函数。

  WEEK() 查看给定日期周数,语法:WEEK(date, mode);

  SUBDATE() 函数做日期减法操作,语法:SUBDATE(date,INTERVAL expr unit) 和 SUBDATE(expr,days);

  DATE_FORMAT() 函数用于以不同的格式显示日期/时间数据,语法:DATE_FORMAT(date,format);

  DATE_SUB() 函数从日期减去指定的时间间隔,语法:DATE_SUB(date,INTERVAL expr type);

  DATE_ADD() 函数向日期添加指定的时间间,语法:DATE_ADD(date,INTERVAL expr type);

样例数据:

-- 创建数据样例表
CREATE TABLE `day_weight_tb` (
  `day_date` varchar(16) DEFAULT NULL,
  `in_weight` varchar(64) DEFAULT NULL,
  `out_weight` varchar(64) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- 插入样例数据
INSERT INTO `day_weight_tb` (`day_date`, `in_weight`, `out_weight`) VALUES (‘2018-03-10‘, ‘18.84‘, ‘74.14‘);
INSERT INTO `day_weight_tb` (`day_date`, `in_weight`, `out_weight`) VALUES (‘2019-01-21‘, ‘17.69‘, ‘25.97‘);
INSERT INTO `day_weight_tb` (`day_date`, `in_weight`, `out_weight`) VALUES (‘2019-02-01‘, ‘16.48‘, ‘10.0‘);
INSERT INTO `day_weight_tb` (`day_date`, `in_weight`, `out_weight`) VALUES (‘2019-01-29‘, ‘10.9‘, ‘74.12‘);
INSERT INTO `day_weight_tb` (`day_date`, `in_weight`, `out_weight`) VALUES (‘2019-02-13‘, ‘15.25‘, ‘16.62‘);
INSERT INTO `day_weight_tb` (`day_date`, `in_weight`, `out_weight`) VALUES (‘2019-01-12‘, ‘19.21‘, ‘95.42‘);
INSERT INTO `day_weight_tb` (`day_date`, `in_weight`, `out_weight`) VALUES (‘2019-02-14‘, ‘26.38‘, ‘20.59‘);
INSERT INTO `day_weight_tb` (`day_date`, `in_weight`, `out_weight`) VALUES (‘2019-01-24‘, ‘15.99‘, ‘16.823‘);
INSERT INTO `day_weight_tb` (`day_date`, `in_weight`, `out_weight`) VALUES (‘2019-01-13‘, ‘94.846‘, ‘56.256‘);
INSERT INTO `day_weight_tb` (`day_date`, `in_weight`, `out_weight`) VALUES (‘2019-03-03‘, ‘15.63‘, ‘12.128‘);
INSERT INTO `day_weight_tb` (`day_date`, `in_weight`, `out_weight`) VALUES (‘2019-03-12‘, ‘14.282‘, ‘24.046‘);
INSERT INTO `day_weight_tb` (`day_date`, `in_weight`, `out_weight`) VALUES (‘2019-01-16‘, ‘14.045‘, ‘11.73‘);
INSERT INTO `day_weight_tb` (`day_date`, `in_weight`, `out_weight`) VALUES (‘2019-03-08‘, ‘23.41‘, ‘23.441‘);
INSERT INTO `day_weight_tb` (`day_date`, `in_weight`, `out_weight`) VALUES (‘2019-01-31‘, ‘11.177‘, ‘4332.26‘);
INSERT INTO `day_weight_tb` (`day_date`, `in_weight`, `out_weight`) VALUES (‘2019-01-23‘, ‘11.8‘, ‘17104.49‘);
INSERT INTO `day_weight_tb` (`day_date`, `in_weight`, `out_weight`) VALUES (‘2019-03-17‘, ‘17.95‘, ‘13.81‘);
INSERT INTO `day_weight_tb` (`day_date`, `in_weight`, `out_weight`) VALUES (‘2019-03-01‘, ‘19.23‘, ‘20.43‘);
INSERT INTO `day_weight_tb` (`day_date`, `in_weight`, `out_weight`) VALUES (‘2019-02-05‘, ‘21.55‘, ‘51.0‘);
INSERT INTO `day_weight_tb` (`day_date`, `in_weight`, `out_weight`) VALUES (‘2019-02-27‘, ‘13.003‘, ‘23.32‘);
INSERT INTO `day_weight_tb` (`day_date`, `in_weight`, `out_weight`) VALUES (‘2019-03-11‘, ‘16.44‘, ‘24.44‘);
INSERT INTO `day_weight_tb` (`day_date`, `in_weight`, `out_weight`) VALUES (‘2019-02-28‘, ‘16.48‘, ‘23.4‘);
-- 创建结果表,插入统计结果
drop TABLE if exists week_count_tb;
CREATE TABLE `week_count_tb` (
  `week_day` varchar(32) DEFAULT NULL,
  `week_num` varchar(32) DEFAULT NULL,
  `in_weight` varchar(64) DEFAULT NULL,
  `out_weight` varchar(64) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

delete from week_count_tb;
INSERT INTO week_count_tb
SELECT
    *
FROM
    (
        SELECT
            middle.week_day,
            middle.week_num,
            sum(in_weight) in_weight,
            sum(out_weight) out_weight
        FROM
            (
                SELECT
                    subdate(
                        date_sub(day_date, INTERVAL 1 DAY),
                        date_format(date_sub(day_date, INTERVAL 1 DAY),‘%w‘) - 7) week_day,
                    WEEK (
                        date_add(subdate(
                                date_sub(day_date, INTERVAL 1 DAY),
                                date_format(date_sub(day_date, INTERVAL 1 DAY),‘%w‘) - 7),INTERVAL 6 DAY),2) week_num,
                    in_weight,
                    out_weight
                FROM
                    day_weight_tb
            ) middle
        GROUP BY
            week_day,
            week_num
    ) result;

思路:先确定一天是属于一年中的具体周数,再获取到一周中的周末日期,最后根据周数分组求和。

原文地址:https://www.cnblogs.com/zengming/p/10743425.html

时间: 2024-11-06 11:31:06

MySQL按周统计 WEEK 实例的相关文章

MySql按周/月/日分组统计数据的方法

知识关键词:DATE_FORMAT select DATE_FORMAT(create_time,'%Y%u') weeks,count(caseid) count from tc_case group by weeks; select DATE_FORMAT(create_time,'%Y%m%d') days,count(caseid) count from tc_case group by days; select DATE_FORMAT(create_time,'%Y%m') month

MySql 按周/月/日统计数据的方法

知识关键词:DATE_FORMAT select DATE_FORMAT(create_time,'%Y%u') weeks,count(caseid) count from tc_case group by weeks; select DATE_FORMAT(create_time,'%Y%m%d') days,count(caseid) count from tc_case group by days; select DATE_FORMAT(create_time,'%Y%m') month

mysql 按月按周统计

http://hi.baidu.com/liangjian1024/blog/item/6861541b1416094842a9ad7c.html 表finance有俩个字段如下 date date money double(15,2)     下面需要对表finance的2010年财务数据,按月进行统计 Sql代码 select DATE_FORMAT(date,'%Y-%m') as month,sum(money) as money from finance where DATE_FORM

mysql按周/月/年统计数据

mysql 按周/月/年统计数据分别如下 select DATE_FORMAT(UPDATE_TIME,'%Y%u') weeks,count(UPDATE_TIME) count from table_name group by weeks; select DATE_FORMAT(UPDATE_TIME,'%Y%m%d') days,count(UPDATE_TIME) count from table_name group by days; select DATE_FORMAT(UPDATE

mysql数据库按周统计

mysql数据库按周统计 需求:统计本周的数据,上一周的数据,不管是不是跨年,星期一是第1天. week函数总共分为8种情况: 以星期一还是星期天做为一周的第1天(一周7天从星期一到星期天) 一年的第1个星期,4天以上在本年还是星期的第1天在本年. 一年开始属于去年的天,返回0还是上一年的星期数. WEEK(date[,mode]) This function returns the week number for date. The two-argument form of WEEK() en

实现mysql按月统计的教程

From: http://www.jbxue.com/db/758.html mysql有个字段是DATETIME类型,要实现可以按月统计,该怎么写sql语句? select month(f1) from tt group by month(f1) or select DATE_FORMAT(f1,'%m') from tt group by DATE_FORMAT(f1,'%m') 比如数据库的为2008-01-15 12:10:00 则DATE_FORMAT的参数格式分别得到的结果为: '%

mysql数据库分区功能及实例详解

分区听起来怎么感觉是硬盘呀,对没错除了硬盘可以分区数据库现在也支持分区了,分区可以解决大数据量的处理问题,下面一起来看一个mysql数据库分区功能及实例详解 一,什么是数据库分区 前段时间写过一篇关于mysql分表的的文章,下面来说一下什么是数据库分区,以mysql为例.mysql数据库中的数据是以文件的形势存在磁盘上的,默认放在/mysql/data下面(可以通过my.cnf中的datadir来查看),一张表主要对应着三个文件,一个是frm存放表结构的,一个是myd存放表数据的,一个是myi存

MySQL管理之SQL语句实例

MySQL管理之SQL语句实例 首先,我们来导入world库,这个world库中的表是mysql ocp考试专用表,在网上有下 mysql> source/root/world_innodb.sql 表结构如下: 本文来自http://yijiu.blog.51cto.com 转载请经博主允许 ,盗帖可耻! CREATE TABLE `Country` (  `Code` char(3) NOT NULL DEFAULT '',  `Name` char(52) NOT NULL DEFAULT

MySQL之体系结构与存储实例

定义数据库和实例 在数据库领域中有两个词很容易混淆,这就是"数据库"(database)和"实例"(instance).作为常见的数据库术语,这两个词的定义如下: 数据库:物理操作系统文件或其他形式文件类型的集合.在MySQL数据库中,数据库文件可以是fm.MYD.MYI.ibd结尾的文件.当使用NDB引擎时,数据库的文件可能不是操作系统上的文件,而是存放在内存之中的文件,但是定义仍然不变. 实例:MySQL数据库由后台线程以及一个共享内存区组成.共享内存可以被运行