Mysql 如何使用子查询统计上个月的记录

Mysql 如何使用子查询统计上个月的记录,mysql,Mysql,我有一张桌子,看起来像: +---+------+---+-----+--------+-----------+ |id | tid | pid | amt | transtime | DateCreated| +---+------+---+-----+--------+-----------+ |784 | LDC3N0JF1Z | 784 | 300.0000 | 20170412174304 | 2017-04-12 17:43:42| |2007-05-12 12:50:15| |20

我有一张桌子,看起来像:

+---+------+---+-----+--------+-----------+ |id | tid | pid | amt | transtime | DateCreated| +---+------+---+-----+--------+-----------+ |784 | LDC3N0JF1Z | 784 | 300.0000 | 20170412174304 | 2017-04-12 17:43:42| |2007-05-12 12:50:15| |2007-05-11 19:28:19| |781 | LDA2MAUW08 | 781 | 200.0000 | 20170410174635 | 2017-07-10 17:47:01| |780 | lda8amqt4 | 780 | 200.0000 | 20170410173245 | 2017-04-10 17:33:19| +---+------+---+-----+--------+-----------+

我需要一个查询,以提供如下所示的结果。我想要的结果是这样的

id|tid        |this_month_amount|amount_previous_month |amount_difference
------------------------------------------------------------------
1 |LDC3N0JF1Z |300              | 700                  |400
我也尝试过这个问题。这就是我所拥有的

选择payment.id、payment.tid、payment.DateCreated作为dc、payment.amount作为本月金额、内部联接 选择sumamount作为t2 sum group by amount from payments,其中DateCreated=DATEADDmm,-1,dcsubquery on payments.id=subquery.id order by id desc limit 5

因此,查询应选择当月的金额,然后选择前几个月的金额,然后在名为amount\u difference的字段中显示差异


这是错误的,所以在尝试了很多之后,我想从你们那里得到一些帮助。谢谢。

要获取当月的值:

select tid, sum(amount) as this_month,
from t
where date_created >= curdate() + interval (1 - day(curdate()) day and
      date_created < curdate() + interval (1 - day(curdate()) day + interval 1 month
group by tid;
间隔1个月和 创建的日期tid分组

谢谢你@Gordon Linnof。我花了一些时间使您的解决方案适合我的应用程序,但现在它可以工作了:
select tid,
       sum(case when month(date_created) = month(curdate()) then amount end) as this_month,
       sum(case when month(date_created) <> month(curdate()) then amount end) as last_month,
       (sum(case when month(date_created) = month(curdate()) then amount end) -
        sum(case when month(date_created) <> month(curdate()) then amount end)
       ) as diff
from t
where date_created >= curdate() + interval (1 - day(curdate()) day -