MySQL查询计算上个月

时间:2013-07-14 17:39:50

标签: mysql

我想计算上个月的总金额。

$people_sql = "SELECT SUM(amount) AS people"
    . " FROM room WHERE userid = '$userid'"
    . " AND date BETWEEN DATE_FORMAT(NOW() - INTERVAL 1 MONTH, '%Y-%m-01')"
    .          " AND DATE_FORMAT(NOW() ,'%Y-%m-01')";

例如,2013年6月1日至30日

通过运行上述查询得到0。

如何让它发挥作用。

2 个答案:

答案 0 :(得分:0)

您希望将字符串转换回日期:

SELECT SUM(amount) AS people
FROM room
WHERE userid = '$userid' AND
      date >= date(DATE_FORMAT(NOW() - INTERVAL 1 MONTH, '%Y-%m-01')) AND
      date < date(DATE_FORMAT(NOW() ,'%Y-%m-01'))

这使用date()功能您还可以使用str_to_date()来提供特定格式。

我更改了between,因为它会包含当月的第一天。

另一种制定方法是:

SELECT SUM(amount) AS people
FROM room
WHERE userid = '$userid' AND
      date_format(date, '%Y-%m') = date_format(now() - interval 1 month, '%Y-%m')

这更简洁。您的方法的优势在于它可以使用date上的索引。

答案 1 :(得分:0)

当我运行查询

SELECT 
  SUM(amount) AS people, 
  DATE_FORMAT(NOW() - INTERVAL 1 MONTH, '%Y-%m-01') as from_date, 
  DATE_FORMAT(NOW() ,'%Y-%m-01') as to_date
FROM room 
WHERE userid = 1
  AND date >= DATE_FORMAT(NOW() - INTERVAL 1 MONTH, '%Y-%m-01') 
  AND date < DATE_FORMAT(NOW() ,'%Y-%m-01')

我的价值很高。

模式:

CREATE TABLE room 
    (
     id int auto_increment primary key, 
     userid int,
     date datetime,
     amount integer
    );

INSERT INTO room
(userid, date, amount)
VALUES
(1, now(), 1), (1, now(), 2), (1, '2010-01-01', 4), (1, '2013-06-20', 8)
相关问题