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