如何汇总上个月的价值?

时间:2014-10-16 17:18:21

标签: mysql sql

我正在尝试将上个月输入的金额(SET)

加起来

这是结构:

CREATE TABLE tester (
date_amount date,
amount int);


INSERT INTO tester VALUES
("2014-08-01", 1000),
("2014-08-02", 1001),
("2014-08-03", 1002),
("2014-08-31", 2000),
("2014-08-31", 2000),
("2014-08-31", 2000),
("2014-09-01", 1006);

这里以示例

为例

如果我输入年份= 2014年和月份= 9,我应该自动汇总在这种情况下输入的月份的最后一天“2014-08-31”中的所有金额

以下是demo

SET @month := 09;
SET @year := 2014;

select sum(amount) from tester 
where   month(date_amount)= @month-1

查询必须汇总上个月最后一天输入的所有金额

我必须得到这样的结果:

SUM(AMOUNT)
6000

我试过这个但不是正确的方法,因为我知道这个月的最后一天:

SET @month := 09;
SET @year := 2014;

select sum(amount) from tester 
where   month(date_amount)= @month-1 and day(date_amount)= 31

我也试过这个查询但是得到了

SET @month := 09;
SET @year := 2014;

SELECT sum(amount)FROM tester 
WHERE month(date_amount)= @month-1 AND day(date_amount) =last_day(day(date_amount))

请有人帮我这个吗?

5 个答案:

答案 0 :(得分:1)

这样的事情:

SELECT SUM(AMOUNT) FROM Tester
WHERE date_amount = LAST_DAY(STR_TO_DATE(@Month + '/00/' + @Year, '%m/%d/%Y'))

如果在表的行的一部分上使用函数,则强制sql执行表扫描。如果将数据转换为完整字段,则可以在搜索中使用索引。

答案 1 :(得分:1)

而不仅仅提供月份和年份提供实际日期,然后您可以获得想要的结果

SET @month := 09;
SET @year := 2014;

SELECT sum(amount)FROM tester 
WHERE month(date_amount)= @month-1 AND day(date_amount) = day(last_day(date_amount))

或者,您可以使用STR_TO_DATE首先转换给定日期的月份和年份,然后使用{而不是@Date

答案 2 :(得分:1)

这可能有所帮助:

SET @month := 09;
SET @year := 2014;

SELECT sum(amount) FROM tester 
WHERE month(date_amount)= @month-1 and date_amount = last_Day(date_amount)

答案 3 :(得分:1)

如上所述,在没有首先应用函数的情况下比较列

会更好
SET @month = '09', @year = '2014';

SELECT
    SUM(amount) total
FROM
    tester
WHERE
    date_amount = STR_TO_DATE(CONCAT_WS('-', @year, @month, '01'), '%Y-%m-%d') - INTERVAL 1 DAY  

答案 4 :(得分:0)

而不是使用当月的第一天和最后一天,只使用带有TO_CHAR(YYYYMM)的年份和月份

select sum(amount)
 from tester 
group  by to_char(date_amount, 'YYYYMM');

在Mysql中你可以使用DATE_FORMAT(date_amount,'%Y%m')而不是to_char