如何获得最后一笔付款并检查帐户今天是否过期?
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'
如果没有完整的 table 架构,就无法再具体了。
我想根据上次付款检查用户今天是否到期
我的付款 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'
如果没有完整的 table 架构,就无法再具体了。