我想计算上个月的总金额。
$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。
如何让它发挥作用。
答案 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)