MySQL查询近12个月最后一天
MySQL是一种常用的关系型数据库管理系统,在各个领域都有广泛的应用。它提供了丰富的功能和灵活的查询语言,使得数据分析和处理变得更加便捷和高效。在实际应用中,我们常常需要查询某个时间范围内的数据,比如最近12个月的数据。本文将介绍如何使用MySQL查询近12个月的最后一天的方法,并给出代码示例。
1. 准备工作
在开始之前,我们需要准备一个包含时间字段的数据表。假设我们有一个名为"sales"的表,包含销售日期(date)和销售额(amount)两个字段。我们的目标是查询最近12个月的最后一天的销售额。下面是创建和插入数据的SQL语句:
CREATE TABLE sales (
id INT PRIMARY KEY AUTO_INCREMENT,
date DATE,
amount DECIMAL(10, 2)
);
INSERT INTO sales (date, amount)
VALUES
('2021-01-01', 1000),
('2021-01-02', 2000),
('2021-02-01', 1500),
('2021-02-02', 2500),
('2021-03-01', 1800),
('2021-03-02', 2800),
...
(省略部分数据)
;
2. 查询近12个月最后一天的SQL语句
为了查询最近12个月的最后一天的数据,我们需要使用MySQL的日期函数和条件语句。下面是查询的SQL语句:
SELECT
DATE_FORMAT(MAX(date), '%Y-%m-%d') AS last_day_of_month,
SUM(amount) AS total_amount
FROM
(
SELECT
LAST_DAY(date) AS date,
amount
FROM
sales
WHERE
date >= DATE_SUB(CURDATE(), INTERVAL 12 MONTH) -- 查询最近12个月的数据
) AS subquery
GROUP BY
last_day_of_month
ORDER BY
last_day_of_month;
上面的SQL语句中,我们使用了DATE_FORMAT
函数将日期格式化为"YYYY-MM-DD"的形式,LAST_DAY
函数获取指定日期的最后一天。DATE_SUB
函数用于计算当前日期减去12个月的日期。SUM
函数用于计算每个月份的销售额总和,GROUP BY
语句按照月份分组,ORDER BY
语句按照月份排序。
3. 查询结果示例
我们使用上述的示例数据运行上面的SQL语句,得到的查询结果如下所示:
last_day_of_month | total_amount |
---|---|
2021-01-31 | 3000 |
2021-02-28 | 4000 |
2021-03-31 | 4600 |
... | ... |
上表展示了最近12个月每个月份的最后一天和对应的销售额总和。你可以根据自己的需求对查询结果进行进一步的处理和分析。
4. 完整代码示例
下面是使用Python和MySQL连接库(如pymysql)执行上述查询的完整代码示例:
import pymysql
# 连接数据库
connection = pymysql.connect(
host='localhost',
user='your_username',
password='your_password',
db='your_database'
)
# 创建游标对象
cursor = connection.cursor()
# 执行查询语句
sql = """
SELECT
DATE_FORMAT(MAX(date), '%Y-%m-%d') AS last_day_of_month,
SUM(amount) AS total_amount
FROM
(
SELECT
LAST_DAY(date) AS date,
amount
FROM
sales
WHERE
date >= DATE_SUB(CURDATE(), INTERVAL 12 MONTH) -- 查询最近12个月的数据
) AS subquery
GROUP BY
last_day_of_month
ORDER BY
last_day_of_month;
"""
cursor.execute(sql)
# 获取查询结果
results = cursor.fetchall()
# 打印查询结果
for row in results:
last_day_of_month = row[0]
total_amount = row[1]
print(f"Last day of month: {last_day_of_month}, Total amount: {total_amount}")
# 关闭游标和连接
cursor.close