2013-07-14 132 views
0

我想計算上個月的總金額。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')"; 

例如6月1日 - 30日2013

我通過運行上面的查詢得到0。

如何讓它工作。

回答

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) 
+0

和更快的響應時間,我建議用戈登·利諾夫第二種方式。 – user1759572

+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上的索引。