如何获得最后一笔付款并检查帐户今天是否过期?

How to get the last payment and the check if account is expired today or not?

我想根据上次付款检查用户今天是否到期

我的付款 table 如下所示...

id   user_id   create_at
32   38        2014-06-05 10:30:00
33   38        2015-06-05 01:30:00

我的查询如下....

我正在查看谁在 1 年前付款并且之后不再付款

SELECT `user`.`id`,
       date_format(max(payment.create_at), ('%Y-%m-%d')) as last_payment_at,
       `payment`.`package_id`,
       `payment`.`id` as payment_id
FROM (`user`)
LEFT JOIN `payment` ON `payment`.`user_id`=`user`.`id`
WHERE date_format(payment.create_at,('%Y-%m-%d')) = '2014-06-05'
GROUP BY `payment`.`user_id` 

我得到的不是零行,而是 payment_id 32.

你在这里有点滥用group by。通用技术是在子查询中找到最后一笔付款,然后连接回该查询结果。它(几乎)是获取与另一列的 max/min 值关联的其余行详细信息的唯一方法,您也不会聚合或分组。

select * 
  from payments p
    inner join (
      select user_id, max(create_at) last_payment
        from payments
        group by user_id
    ) q
    on p.user_id = q.user_id
      and p.create_at = q.last_payment
    inner join user u
      on p.user_id = u.id
  where date(last_payment) = '2014-06-05'

demo here

如果没有完整的 table 架构,就无法再具体了。