MySql查询上周(周一到周日)每天的日期!土方!
首先介绍一个函数:YEARWEEK(date[,mode])
主要说明一下后面的可选参数mode,这个参数就是指定一周里面哪一天是第一天。
默认一周是从周日开始,这显然不太符合我们的要求。要指定每周从周一开始的话,mode=1就好了。
下图为该参数的说明:
接下来进入正题,直接上SQL吧
SELECT
date_format(lastWeek.`timeDay`,'%Y-%m-%d') as 'timeDay'
FROM (
select DATE_SUB(NOW(),interval 13 day) as 'timeDay'
UNION ALL
select DATE_SUB(NOW(),interval 12 day) as 'timeDay'
UNION ALL
select DATE_SUB(NOW(),interval 11 day) as 'timeDay'
UNION ALL
select DATE_SUB(NOW(),interval 10 day) as 'timeDay'
UNION ALL
select DATE_SUB(NOW(),interval 9 day) as 'timeDay'
UNION ALL
select DATE_SUB(NOW(),interval 8 day) as 'timeDay'
UNION ALL
select DATE_SUB(NOW(),interval 7 day) as 'timeDay'
UNION ALL
select DATE_SUB(NOW(),interval 6 day) as 'timeDay'
UNION ALL
select DATE_SUB(NOW(),interval 5 day) as 'timeDay'
UNION ALL
select DATE_SUB(NOW(),interval 4 day) as 'timeDay'
UNION ALL
select DATE_SUB(NOW(),interval 3 day) as 'timeDay'
UNION ALL
select DATE_SUB(NOW(),interval 2 day) as 'timeDay'
UNION ALL
select DATE_SUB(NOW(),interval 1 day) as 'timeDay'
) as lastWeek
WHERE YEARWEEK(lastWeek.`timeDay`,1) = YEARWEEK(NOW(),1)-1
为什么说这是个土方呢,哈哈!首先看上去莫名的土,理解一下逻辑如下:
假如今天是周一,我要得出上周一和上周日的日期,很简单:
上周一距离今天7天=select DATE_SUB(NOW(),interval 7 day);
上周日距离今天1天=select DATE_SUB(NOW(),interval 1 day); 没毛病,那如果今天是周日呢?
上周一距离今天13天=select DATE_SUB(NOW(),interval 13 day);
上周日距离今天7天=select DATE_SUB(NOW(),interval 7 day); 没错,这里就是查询出来上周所有可能的日期,因为这个问题的难点就是
我们不能指定当前的日期。 查询出来之后在结合MySql的函数YEARWEEK,就可以得出上周的日期了
我写这个的SQL的原因,是因为有这么个需求:要统计上周每天的注册人数,以柱状图的形式展现。
要是直接使用
SELECT
DATE_FORMAT(regist_date,'%Y-%m-%d') '注册时间',COUNT(*) as '注册人数'
FROM t_user
WHERE YEARWEEK(regist_date,1) = YEARWEEK(NOW(),1)-1
GROUP BY DATE_FORMAT(regist_date,'%Y-%m-%d')
会出现如果有一天没有注册人数的话,这一天就没有数据,产品的需求呢是没有注册人数的话显示为0。
于是就有了下面的写法
SELECT
t1.timeDay as '日期',t2.`注册人数`
FROM (
SELECT
date_format(lastWeek.`timeDay`,'%Y-%m-%d') as 'timeDay'
FROM (
select DATE_SUB(NOW(),interval 13 day) as 'timeDay'
UNION ALL
select DATE_SUB(NOW(),interval 12 day) as 'timeDay'
UNION ALL
select DATE_SUB(NOW(),interval 11 day) as 'timeDay'
UNION ALL
select DATE_SUB(NOW(),interval 10 day) as 'timeDay'
UNION ALL
select DATE_SUB(NOW(),interval 9 day) as 'timeDay'
UNION ALL
select DATE_SUB(NOW(),interval 8 day) as 'timeDay'
UNION ALL
select DATE_SUB(NOW(),interval 7 day) as 'timeDay'
UNION ALL
select DATE_SUB(NOW(),interval 6 day) as 'timeDay'
UNION ALL
select DATE_SUB(NOW(),interval 5 day) as 'timeDay'
UNION ALL
select DATE_SUB(NOW(),interval 4 day) as 'timeDay'
UNION ALL
select DATE_SUB(NOW(),interval 3 day) as 'timeDay'
UNION ALL
select DATE_SUB(NOW(),interval 2 day) as 'timeDay'
UNION ALL
select DATE_SUB(NOW(),interval 1 day) as 'timeDay'
) as lastWeek
WHERE YEARWEEK(lastWeek.`timeDay`,1) = YEARWEEK(NOW(),1)-1
) as t1
LEFT JOIN (
SELECT
DATE_FORMAT(regist_date,'%Y-%m-%d') '注册时间',COUNT(*) as '注册人数'
FROM t_user
WHERE YEARWEEK(regist_date,1) = YEARWEEK(NOW(),1)-1
GROUP BY DATE_FORMAT(regist_date,'%Y-%m-%d')
) as t2 ON t1.timeDay = t2.`注册时间`
ORDER BY t1.timeDay
这样就搞定了。你还可以以这种方法查出上个月的日期哦。
希望能帮到你~
MySql查询上周(周一到周日)每天的日期!土方!的更多相关文章
- JAVA获取当前日期所在的周一到周日的所有日期集合
/** * 获取当前日期所在的周一到周日的所有日期集合 * @return */ public static List<Date> getWeekDateList() { Calendar ...
- php获取本周周一、周日时间,上周周一、周日时间,本月第一天,本月最后一天,上个月第一天,最后一天时间
权声明:本文为博主原创文章,未经博主允许不得转载. //这个星期的星期一 // @$timestamp ,某个星期的某一个时间戳,默认为当前时间 // @is_return_timestamp ,是否 ...
- js获取选中日期的当周的周一和周日
js获取选中日期的当周的周一和周日 第一种方法(推荐): function getWeekStr(str) { // 将字符串转为标准时间格式 str2 = Date.parse(str); let ...
- MySQL查询今天/本周/上周/本月/上个月份的数据
MySQL查询的方式很多,下面为您介绍的MySQL查询实现的是查询本周.上周.本月.上个月份的数据,如果您对MySQL查询方面感兴趣的话,不妨一看. 查询当前今天的数据 SELECT name,sub ...
- mysql YEARWEEK(date[,mode]) 函数 查询上周数据 以及本周数据
通常使用下边sql即可(如果数据库设置了周一为一周起始的话): 查询上周数据(addtime为datetime格式) SELECT id,addtime FROM mall_order WHERE ...
- MySQL查询今天/昨天/本周、上周、本月、上个月份数据的sql代码
MySQL查询本周.上周.本月.上个月份数据的sql代码 作者: 字体:[增加 减小] 类型:转载 时间:2012-11-29我要评论 MySQL查询的方式很多,下面为您介绍的MySQL查询实现的是查 ...
- MySQL查询本周、上周、本月、上个月份数据的sql代码(转)
感谢:http://www.jb51.net/article/32277.htm ----------------------------------------------------------- ...
- mysql查询今天、昨天、上周
mysql查询今天.昨天.上周 今天 select * from 表名 where to_days(时间字段名) = to_days(now()); 昨天 SELECT * FROM 表名 WHERE ...
- mysql 查询当天、昨天、本周、上周、本月、上月、今年、去年数据
mysql查询今天.昨天.7天.近30天.本月.上一月 数据 今天 select * from 表名 where to_days(时间字段名) = to_days(now()); 昨天 SELECT ...
随机推荐
- Spring Cloud 和 Dubbo,到底用哪个好?
Spring Cloud是http协议传输,带宽会比较多,同时使用http协议一般会使用JSON报文,消耗会更大 dubbo的开发难度较大,原因是dubbo的jar包依赖问题很多大型工程无法解决 sp ...
- Air722UG_模块硬件设计手册_V1.1
下载PDF版本: Air722UG_模块硬件设计手册_V1.1.pdf @ 目录 1. 绪论 2.综述 2.1 型号信息 2.2 主要性能 2.3 功能框图 3.应用接口 3.1 管脚描述 3.2 工 ...
- Mybati-Plus的用法 记录
参考文件下载地址: https://files.cnblogs.com/files/bulter/MyBatis-Plus.zip --------------------------------- ...
- Visual Studio 2019 v16.10 和 v16.11 Preview 1 现已推出!
Visual Studio 2019 v16.10有什么新功能? 我们很高兴地宣布Visual Studio 2019 v16.10 GA 和 v16.11 preview 1发布.此版本使我们的主题 ...
- 最佳实践丨使用Rancher轻松管理上万资源不是梦!
前 言 Rancher 作为一个开源的企业级 Kubernetes 集群管理平台.你可以导入现有集群,如 ACK.TKE.EKS.GKE,或者使用 RKE.RKE2.K3s 自定义部署集群. 作为业界 ...
- 『心善渊』Selenium3.0基础 — 16、Selenium对iframe表单的操作
目录 1.什么是iframe表单 2.iframe表单操作流程 3.iframe表单操作常用方法 (1)进入表单 (2)多表单切换 4.表单操作示例 1.什么是iframe表单 实际上就是HTML页面 ...
- [Linux]Ansible自动化运维① - 入门知识
目录 一.Ansible 概述 1.1 Ansible 是什么 1.2 Ansible 优势 1.3 Ansible 特性 二.Ansible 入门 2.1 Ansible 架构 2.2 Ansibl ...
- uniapp uni.navigateTo 传值传对象
uni.navigateTo({ url: '/pages/details?obj='+ encodeURIComponent(JSON.stringify(item)) }); 接收: onLoad ...
- 连接mysql数据库实现增删改查(一)
在python中我们通过pymysql来连接数据库,具体实现如下 ''' 连接mysql数据库 此类进行封装了一些基础的操作数据库方法 ''' import pymysql from Homework ...
- Kafka:docker安装Kafka消息队列
安装之前先看下图 Kafka基础架构及术语 Kafka基本组成 Kafka cluster: Kafka消息队列(存储消息的队列组件) Zookeeper: 注册中心(kafka集群依赖zookee ...