首页 > 数据库 >[数据库] MYSQL之SQL查询(日期时间篇)

[数据库] MYSQL之SQL查询(日期时间篇)

时间:2024-06-13 14:57:12浏览次数:15  
标签:-% FORMAT UNION 数据库 MYSQL date SQL DATE SELECT

CASE:查询当天/昨天数据

# 当天
select * from table where to_days(时间字段) = to_days(now());

# 昨天
select * from table where to_days(now( ) ) - to_days( 时间字段名) <= 1

CASE:查询近N分钟/周/月/年的数据

# 近5分钟
SELECT * FROM table WHERE 时间字段 >= DATE_SUB(now(),INTERVAL 5 MINUTE)

# 近7天
SELECT * FROM table WHERE date(时间字段) >= DATE_SUB(CURDATE(),INTERVAL 7 DAY) //查询近七天

# 近一月
SELECT * FROM table WHERE date(时间字段) >= DATE_SUB(CURDATE(),INTERVAL 1 MONTH)//查询近一月

# 近一年
SELECT * FROM table WHERE date(时间字段) >= DATE_SUB(CURDATE(),INTERVAL 1 YEAR) //查询近一年

CASE:查询本周/月/年数据

# 本周数据(周一为第一天)
SELECT * FROM table WHERE YEARWEEK(date_format(时间字段,'%Y-%m-%d'), 1) = YEARWEEK(now(),1);

# 本月
select * from table where DATE_FORMAT(时间字段, '%Y%m' ) = DATE_FORMAT( CURDATE( ) , '%Y%m' )

# 本年
select * from table where YEAR(时间字段)=YEAR(now());

CASE:查询上月/年的数据

# 上一月
select * from table where PERIOD_DIFF(date_format(now(),'%Y%m') , date_format(时间字段,'%Y%m')) =1

# 上一年
select * from table where year(时间字段)=year(date_sub(now(),interval 1 year));

CASE:查询某年度的每个月数据报表

select 
	a.date AS 'xData'
	, IFNULL(b.sum, 0) AS 'yData'
from  (
	select 
		DATE_FORMAT(
			adddate(DATE_SUB(CURDATE(), INTERVAL dayofyear(now()) - 1 DAY),
			INTERVAL numlist.id - 1 month), '%m'
		) as date
	from (
		SELECT 
			@xi := @xi + 1 as id
		from (
			SELECT 1 
			UNION 
			SELECT 2 
			UNION 
			SELECT 3
		) xc1
		, (
			SELECT 1 
			UNION 
			SELECT 2 
			UNION SELECT 3 
			UNION SELECT 4
		) xc2
		, (SELECT @xi := 0) xc0
	) as numlist
) a
left join(
	SELECT  
		IFNULL(SUM(income),0) sum
		, DATE_FORMAT(time, '%m') as date
	FROM zq_cnz_hy_income_report ts
	WHERE YEAR(time)=#{year}
	GROUP BY date 
	ORDER BY date
) b
on a.date = b.date 
order by a.date

CASE:查询近一年的每个月数据报表

SELECT v.month AS 'xData',IFNULL(b.COUNT,0) AS 'yData' FROM (
	SELECT DATE_FORMAT(CURDATE(), '%Y-%m') AS `month`
	UNION SELECT DATE_FORMAT((CURDATE() - INTERVAL 1 MONTH), '%Y-%m') AS `month`
	UNION SELECT DATE_FORMAT((CURDATE() - INTERVAL 2 MONTH), '%Y-%m') AS `month`
	UNION SELECT DATE_FORMAT((CURDATE() - INTERVAL 3 MONTH), '%Y-%m') AS `month`
	UNION SELECT DATE_FORMAT((CURDATE() - INTERVAL 4 MONTH), '%Y-%m') AS `month`
	UNION SELECT DATE_FORMAT((CURDATE() - INTERVAL 5 MONTH), '%Y-%m') AS `month`
	UNION SELECT DATE_FORMAT((CURDATE() - INTERVAL 6 MONTH), '%Y-%m') AS `month`
	UNION SELECT DATE_FORMAT((CURDATE() - INTERVAL 7 MONTH), '%Y-%m') AS `month`
	UNION SELECT DATE_FORMAT((CURDATE() - INTERVAL 8 MONTH), '%Y-%m') AS `month`
	UNION SELECT DATE_FORMAT((CURDATE() - INTERVAL 9 MONTH), '%Y-%m') AS `month`
	UNION SELECT DATE_FORMAT((CURDATE() - INTERVAL 10 MONTH), '%Y-%m') AS `month`
	UNION SELECT DATE_FORMAT((CURDATE() - INTERVAL 11 MONTH), '%Y-%m') AS `month`
) v
LEFT JOIN(
	SELECT 
		LEFT(a.time,7) AS 'month',SUM(income) AS COUNT
	FROM zq_cnz_hy_income_report AS a
	LEFT JOIN zq_cnz_hy_user_station zs ON a.station_id=zs.station_id
	WHERE DATE_FORMAT(a.time,'%Y-%m')>DATE_FORMAT(DATE_SUB(CURDATE(), INTERVAL 12 MONTH),'%Y-%m')
	GROUP BY MONTH
) AS b
ON v.month = b.month
GROUP BY v.month 
ORDER BY v.month

CASE:查询本月数据报表

select 
	a.date as 'xData'
	, IFNULL(b.sum, 0) AS 'yData'
from  (
	select 
		date 
	from (
		SELECT 
			DATE_FORMAT(DATE_SUB(last_day(curdate()), INTERVAL xc-1 day), '%Y-%m-%d') as date
		FROM (
			SELECT 
				@xi:=@xi+1 as xc 
			from 
				(SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6) xc1,
				(SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6) xc2,
				(SELECT @xi:=0) xc0
		) xcxc
	) x0 
	where x0.date >= (select date_add(curdate(),interval-day(curdate())+1 day))
) a 
left join (
	select 
		IFNULL(SUM(income),0) as sum
		, DATE_FORMAT(time,'%Y-%m-%d') as date
	FROM zq_cnz_hy_income_report ts
	group by DATE_FORMAT(time, '%Y-%m-%d')
) b
on a.date =b.date 
order by a.date

CASE:查询近一个月数据报表

SELECT
	b.created AS 'xData'
	, IFNULL(c.sum, 0) AS 'yData'
FROM (
	SELECT
		@cdate := date_add( @cdate, INTERVAL - 1 DAY ) created
	FROM( 
		SELECT 
			@cdate := date_add( CURDATE( ), INTERVAL 1 DAY ) 
		FROM zq_cnz_hy_income_report 
		LIMIT 30 
	) a
) b
LEFT JOIN (
	select 
		SUM(income) as sum
		, DATE_FORMAT(time,'%Y-%m-%d') as date
	FROM zq_cnz_hy_income_report ts
	group by DATE_FORMAT(time, '%Y-%m-%d')
) c ON b.created = date_format( c.date, '%Y-%m-%d')
GROUP BY b.created
ORDER BY b.created;

X 参考文献

标签:-%,FORMAT,UNION,数据库,MYSQL,date,SQL,DATE,SELECT
From: https://www.cnblogs.com/johnnyzen/p/18245853

相关文章

  • 数栈xAI:轻量化、专业化、模块化,四大功能革新 SQL 开发体验
    在这个数据如潮的时代,SQL已远远超越了简单的查询语言范畴,它已成为数据分析和决策制定的基石,成为撬动企业智慧决策的关键杠杆。SQL的编写和执行效率直接关系到数据处理的速度和分析结果的深度,对企业洞察市场动态、优化业务流程、提升决策质量起着至关重要的作用。如何在浩瀚的数......
  • 专用向量数据库:Watch your back!
    PostgreSQL生态再添利器:Timescale最新推出了两款创新的开源扩展——pgvectorscale和pgai,喊话专用向量数据库:Watchyourback!性能和成本效率创新高pgvectorscale扩展基于StreamingDiskANN索引和Timescale的统计二进制量化技术,在性能上取得了显著进步。基准测试显示,使用pgvecto......
  • mysql中group by 的用法解析
    1.groupby的常规用法groupby的常规用法是配合聚合函数,利用分组信息进行统计,常见的是配合max等聚合函数筛选数据后分析,以及配合having进行筛选后过滤。假设现有数据库表如下:表user_info,id主键,user_id唯一键CREATETABLE`user_info`(`id`INT(11)NOTNULLAUTO......
  • Java操作数据库 —— JDBC ① 基础篇
    我走我的路,有人拦也走,没人陪也走                                                ——24.6.7JDBCJDBC就是使用Java语言操作关系型数据库的一套API一、JDBC简介JDBC概念        JDBC就是使用Java语言操......
  • PostgreSQL的视图pg_views
    PostgreSQL的视图pg_viewspg_views是PostgreSQL中的一个系统视图,用于显示数据库中所有视图(views)的相关信息。视图是一个虚拟表,其内容由查询定义。通过查询pg_views视图,数据库管理员和开发人员可以查看当前数据库中定义的所有视图的信息。pg_views视图的主要列列名......
  • MySQL创建数据库和表的详细教程
    MySQL创建数据库和表的详细教程1.简介MySQL是一个流行的关系型数据库管理系统,它使用标准的SQL语言进行数据操作。在本文中,我们将详细介绍如何在MySQL中创建数据库和表,并通过实例代码演示整个过程。同时,我们还会分析一些常见问题并提供解决方案。2.安装MySQL首先,确保你......
  • MySQL从入门到高级 --- 15.优化 && 16.pymysql
    文章目录第十五章&&第十六章:15.优化15.1查询SQL执行效率15.2定位低效率执行SQL15.3explain分析执行计划-基本使用15.4explain分析执行计划-id15.5explain分析执行计划-select_type15.6explain分析执行计划-type15.7explain分析执行计划-其他指标字段15......
  • 数据库的读现象浅析
    “读现象”是多个事务并发执行时,在读取数据方面可能碰到的状况。先了解它们有助于理解各隔离级别的含义。其中包括脏读、不可重复读和幻读。脏读脏读又称无效数据的读出,是指在数据库访问中,事务T1将某一值修改,然后事务T2读取该值,此后T1因为某种原因撤销对该值的修改,这就导致了T2......
  • 快速上手 GreatSQL 8.0.32-25 with openEuler 24.03 LTS
    5月底,openEuler24.03LTS发布,详情戳:恭喜!openEuler24.03LTS版本发布:首个AI原生开源操作系统在诸多亮点特性中,有一条值得注意:集成GreatSQL数据库,适用于金融级应用场景,具有高可用、高性能、高兼容、高安全等特性。那么,本文就来介绍一下如何安装openEuler24.0......
  • MySQL MariaDB 安装
    MySQLMariaDB安装指南MariaDB是MySQL数据库管理系统的一个分支,旨在保持与MySQL兼容并添加更多的功能和改进。以下是如何在不同操作系统上安装MariaDB的详细步骤。在Linux上安装MariaDB1.在Ubuntu/Debian上安装MariaDB首先,更新你的软件包索引:sudoaptu......