sql 语句查询今天、昨天、近7天、近30天、一个月内、上一月 数据

本文介绍如何使用SQL查询特定时间段的数据,包括几个小时内、当天、昨天、最近7天、近30天、本月及上个月等多种常见场景的具体实现方法。

几个小时内的数据

DATE_SUB(NOW(), INTERVAL 5 HOUR)

今天


select * from 表名 where to_days(时间字段名) = to_days(now());

昨天

SELECT * FROM 表名 WHERE TO_DAYS( NOW( ) ) - TO_DAYS( 时间字段名) = 1

7天

SELECT * FROM 表名 where DATE_SUB(CURDATE(), INTERVAL 7 DAY) <= date(时间字段名)

近30天

SELECT * FROM 表名 where DATE_SUB(CURDATE(), INTERVAL 30 DAY) <= date(时间字段名)

本月

SELECT * FROM 表名 WHERE DATE_FORMAT( 时间字段名, '%Y%m' ) = DATE_FORMAT( CURDATE( ) , '%Y%m' )

上一月

SELECT * FROM 表名 WHERE PERIOD_DIFF( date_format( now( ) , '%Y%m' ) , date_format( 时间字段名, '%Y%m' ) ) =1


一个月以内:

原文网址http://blog.youkuaiyun.com/u012063703/article/details/42679559

参考资源链接:[MySQL按时间维度查询价格平均值:实时折线图数据准备](https://wenku.youkuaiyun.com/doc/6wr1u3p3su?utm_source=wenku_answer2doc_content) 在处理按日期维度计算商品价格平均值时,我们面临的主要挑战是如何生成日期序列,并在此基础上执行分组聚合。《MySQL按时间维度查询价格平均值:实时折线图数据准备》这本书为我们提供了处理这类问题的权威指导和实用技巧。 首先,为了解决7价格平均值的问题,我们需要创建一个从今天起往回推7的日期序列。这可以通过递归查询实现,配合使用DATE_ADD函数递减时间。接着,我们将生成的日期序列与价格记录进行左连接,并使用IFNULL函数处理缺失的数据,将缺失值替换为0。以下是实现该功能的SQL查询示例: ```sql -- 创建日期序列并计算7的价格平均值 SET @cdate = DATE_ADD(CURDATE(), INTERVAL 1 DAY); SELECT IFNULL(avg_price, 0) AS avg_price, date FROM ( SELECT @cdate := DATE_ADD(@cdate, INTERVAL -1 DAY) AS date FROM ( SELECT @cdate := DATE_ADD(CURDATE(), INTERVAL 1 DAY) FROM dual LIMIT 7 ) a ) date_seq LEFT JOIN ( SELECT AVG(price) AS avg_price, DATE(gmt) AS date FROM price_log WHERE gmt >= DATE_SUB(CURDATE(), INTERVAL 7 DAY) GROUP BY DATE(gmt) ) price_avg ON price_avg.date = date_seq.date; ``` 对于每5计算一次价格平均值的问题,我们需要首先确定一个月内每个5周期的起始和结束日期。这里可以利用CEILING函数和DATEDIFF函数来计算日期间隔,从而确定每个周期的起始日期。然后,再根据这个周期对价格进行分组并计算平均值。以下是实现该功能的SQL查询示例: ```sql -- 计算每5周期的一个月价格平均值 SELECT IFNULL(avg_price, 0) AS avg_price, gmt FROM ( SELECT DATE_SUB(CURDATE(), INTERVAL interval_5_day * 5 DAY) AS gmt FROM ( SELECT CEILING(DATEDIFF(CURDATE(), gmt) / 5) AS interval_5_day FROM price_log WHERE gmt BETWEEN CURDATE() - INTERVAL 30 DAY AND CURDATE() GROUP BY CEILING(DATEDIFF(CURDATE(), gmt) / 5) ) subquery ) date_cycle LEFT JOIN ( SELECT DATE(gmt) AS gmt, AVG(price) AS avg_price FROM price_log WHERE gmt BETWEEN CURDATE() - INTERVAL 30 DAY AND CURDATE() GROUP BY DATE(gmt) ) price_avg ON DATE_SUB(CURDATE(), INTERVAL interval_5_day * 5 DAY) = gmt; ``` 通过上述两个查询,我们可以得到所需的日期序列和价格平均值,为绘制折线图提供数据支持。为深入理解这些查询的工作原理以及如何应用到其他类似问题,建议阅读《MySQL按时间维度查询价格平均值:实时折线图数据准备》一书,其中包含了更多细节和案例,可以帮助你掌握时间序列分析和数据可视化方面的知识。 参考资源链接:[MySQL按时间维度查询价格平均值:实时折线图数据准备](https://wenku.youkuaiyun.com/doc/6wr1u3p3su?utm_source=wenku_answer2doc_content)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值