MySQL经典编程问题
星期数的问题
1 计算日期是周几
这个问题看似很简单,可以用MySQL内置函数来计算
(1) weekday(date)其返回值是0-6,0代表Monday, 6代表Sunday;
(2) dayofweek(date)其返回值是1-7,但是它更不好理解,1代表的是Sunday, 6代表的Saturday;
(3) dayname(date)其返回值直接是具体的名词,Monday, Tuesday...
以上三种方法都能够根据日期计算周几,但是都有一定的局限,相对weekday()最符合中国人的习惯。
我们还有另外一个方便的计算方法,如我们知道确切的某天是周几,如:2000-01-03是周一,那么我就可以用下列方式计算某个日期属于周几了
select (datediff(date,'2000-01-03')+1)%7,结果为1就是周一,结果为2就是周二,结果为7就是周日
select (datediff('2017-12-22','2000-01-03')+1)%7 = 5 则 2017-12-22 是周五,我们可以取任意为周一的日期作为参照基数来计算,非常符合中国人的思维习惯。
2 按周分组
这个问题如果使用系统函数week(date),当一个周夸年时week会将一个周拆分为两个周统计,具体情况如下:
建立测试数:
CREATE TABLE `sales` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`date` datetime NOT NULL,
`cost` int(10) unsigned NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of sales
-- ----------------------------
INSERT INTO `sales` VALUES ('8', '2017-01-01 00:00:00', '100');
INSERT INTO `sales` VALUES ('1', '2017-11-30 00:00:00', '100');
INSERT INTO `sales` VALUES ('2', '2017-12-01 00:00:00', '100');
INSERT INTO `sales` VALUES ('3', '2017-12-02 00:00:00', '100');
INSERT INTO `sales` VALUES ('4', '2017-12-31 00:00:00', '100');
INSERT INTO `sales` VALUES ('5', '2018-01-01 00:00:00', '100');
INSERT INTO `sales` VALUES ('6', '2018-01-02 00:00:00', '100');
INSERT INTO `sales` VALUES ('7', '2018-01-10 00:00:00', '100');
使用week函数按周获取每周的cost
select week(date),sum(cost)
from sales
group by week(date);

week 函数计算的结果是把 2017-12-31,2018-01-01,2018-01-02算作一周,而且是算作2017年最后一周,实际应用中我们把2018-01-01 ~ 2018-01-07视作一周, 2017-12-25 ~ 2017-12-31视作一周,所以week函数明显不符合我们实际使用需求。
我们介绍一种类似星期几计算的方法,同样使用日期参照法,2017-01-02为周一,方便计算我们使用它作为参照
select floor(datediff(date,'2017-01-02')/7) as week_number,
date_add('2017-01-02',interval floor((datediff(date,'2017-01-02')/7))*7 day) as begin_dt,
date_add('2017-01-02',interval floor((datediff(date,'2017-01-02')/7))*7+6 day) as end_dt,
sum(cost) as total
from sales
group by floor((datediff(date,'2017-01-02')/7));

这样不但可以计算出周,还可以计算出每周的开始与结束时间。
MySQL经典编程问题的更多相关文章
- 《MySQL 存储过程编程》-读书笔记
本书结构: 第一部分:存储编程基础 第1章:存储过程程序基础 第2章:MySQL存储编程指南 第3章:语言基础 第4章:语句块 第5章:在存储程序中使用SQL 第一章:MySQL存储程序介绍 存储程序 ...
- 10 个 MySQL 经典错误【转】
Top 1:Too many connections(连接数过多,导致连接不上数据库,业务无法正常进行) 问题还原 mysql> show variables like '%max_connec ...
- 使用C语言调用mysql数据库编程实战以及技巧
今天编写使用C语言调用mysql数据库编程实战以及技巧.为其它IT同行作为參考,当然有错误能够留言,共同学习. 一.mysql数据库的C语言经常使用接口API 1.首先当然是链接数据库mysql_re ...
- 数据库MySQL经典面试题之SQL语句
数据库MySQL经典面试题之SQL语句 1.需要数据库表1.学生表Student(SID,Sname,Sage,Ssex) --SID 学生编号,Sname 学生姓名,Sage 出生年月,Ssex 学 ...
- 【不断更新】mysql经典50道题自我练习
mysql经典50道题自我练习 测试数据和练习题均转载自CSDN博主@启明星的指引的文章sql语句练习50题(Mysql版),用于mysql的每日自我练习 表名和字段 –1.学生表 Student(s ...
- MYSQL经典练习题,熟悉DQL
MYSQL经典练习题 (本练习题可让你熟悉DQL,快速的上手DQL) 首先,先在数据库中建立基本数据库以及表项: DROP DATABASE IF EXISTS `test`; CREATE DATA ...
- 经典书籍---MySQL经典书籍下载
以下是一些经典的MySQL书籍电子版,括号内为提取码,若需自取. 欢迎阅读纸质版,尊重作者版权 高性能MySQL_中文版 [ hre3 ] 高性能MySQL_英文版[ m2xj ] MySQL技术内幕 ...
- oracle/mysql经典电子书籍pdf下载
Oracle LZ写的书,深入结合oracle设计.优化/SQL优化.应用层架构与优化.大量生产案例,敬请期待... Oracle编程艺术 深入理解数据库体系结构(第3版) 链接:https://pa ...
- (ZZ)WPF经典编程模式-MVVM示例讲解
http://www.cnblogs.com/xjxz/archive/2012/11/14/WPF.html 本篇从两个方面来讨论MVVM模式: MVVM理论知识 MVVM示例讲解 一,MVVM理论 ...
随机推荐
- beta版本合集
beta版本合集 [<p><span style="text-align: center; padding-bottom: 6px; background-color: # ...
- Kafka 0.11新功能介绍:空消费组延迟rebalance
Kafka 0.11新功能介绍:空消费组延迟rebalance 在0.11之前的版本中,多个consumer实例加入到一个空消费组将导致多次的rebalance,这是由于每个consumer inst ...
- html文本格式
- 前端性能优化成神之路--vue组件懒加载(Vue Lazy Component )
---恢复内容开始--- 使用组件懒加载的原因 我们先来看看这样的一个页面,页面由大量模块组成,所有模块是同时进行加载,模块中图片内容较多,每个模块的依赖资源较多(包括js文件.接口文件.css文件等 ...
- Mybatis之插件拦截
参考:http://www.mybatis.org/mybatis-3/zh/configuration.html#plugins MyBatis 允许你在已映射语句执行过程中的某一点进行拦截调用.默 ...
- ③---Java项目管理工具MAVEN安装与配置
Java项目管理工具MAVEN安装配置以下将为大家介绍Java项目管理工具MAVEN安装及其配置. 一.下载MAVEN安装文件 maven下载地址:https://maven.apache.org/d ...
- 06 python初学 (列表内置方法)
目录: type(a) is list :判断 a 是不是列表.返回 True False count:计算列表内某一元素出现的次数 extend:在列表末尾一次性添加另一列表中的全部值 index: ...
- Spring Boot配置文件详解-ConfigurationProperties和Value优缺点-(转)好文
文章转自 http://www.cnblogs.com/itdragon/p/8686554.html Spring Boot提供了两种常用的配置文件,分别是properties文件和yml文件.他们 ...
- mybatis之一对多
今天主要话题围绕这么几个方面? mybatis一对多示例 sql优化策略 一.mybatis之一对多 在说一对多之前,顺便说一下一对一. 一对一,常见的例子,比如以常见的班级例子来说,一个班主任只属于 ...
- odoo10学习笔记
odoo的API: Odoo新API的介绍与应用: odoo新api的实现是借助于python装饰器.新API的装饰器主要有以下几种: model,multi,one,constrains,depen ...