如何在mysql中确定该用户本周的延迟付款
Posted
技术标签:
【中文标题】如何在mysql中确定该用户本周的延迟付款【英文标题】:How To determine this user late pay for this week in mysql 【发布时间】:2019-06-26 15:53:23 【问题描述】:所以在这里我有一个案例来确定这个用户他每周是否迟到付款,以确定迟到与付款日期和上一个逾期字段的比较
我有这样的样本数据
Name to be paid DATE PAID OVERDUE DATE
Bakrie 195000 2019-07-01 2019-07-08
Rocky 195000 2019-07-01 2019-07-08
Bakrie 195000 2019-07-15 2019-07-22
Bakrie 195000 2019-07-29 2019-08-05
Bakrie 195000 2019-08-05 2019-08-12
Febri 130000 2019-06-25 2019-07-02
希望生成的数据
Name to be paid DATE PAID OVERDUE DATE sign
Bakrie 195000 2019-07-01 2019-07-08 NOT LATE
Rocky 195000 2019-07-01 2019-07-08 NOT LATE
Bakrie 195000 2019-07-15 2019-07-22 LATE
Bakrie 195000 2019-07-29 2019-08-05 Late
Bakrie 195000 2019-08-05 2019-08-12 not late
Febri 130000 2019-06-25 2019-07-02 not late
如您所见用户名 bakrie 他延迟付款,因为在第二个付款日期已超过他之前记录的付款到期日的到期日
我尝试过这样的查询,但失败了。他这样显示数据不晚
Bakrie 195000 2019-07-01 2019-07-08 NOT LATE
Bakrie 195000 2019-07-01 2019-07-08 NOT LATE
Bakrie 195000 2019-07-01 2019-07-08 NOT LATE
Bakrie 195000 2019-07-01 2019-07-08 NOT LATE
Rocky 195000 2019-07-01 2019-07-08 NOT LATE
Bakrie 195000 2019-07-15 2019-07-22 LATE
我的查询是这样的`
select trackku.*, if(date paid > overdue_paid,'LATE','NOT LATE') from trackku
请帮帮我!?!?!
【问题讨论】:
为什么你要为 Bakrie 签署 LATE 付款,当他在 2019 年 7 月 29 日付款时,到期日是 2019 年 8 月 5 日? 您从查询中获得的数据与表中的示例数据不对应。查看过期日期... 是的,但是当有另一个用户迟到来确定他是否迟到时,bakrie 不仅会出现。 对不起,我不明白你的解释。请在数据中澄清并修正您的逾期日期。 为什么你要为 Bakrie 签署 LATE 付款,当他在 2019-07-29 付款时,到期日是 2019-08-05?因为之前的记录提醒到期日是 2019 年 7 月 22 日,而下一个记录他的付款日期是 2019 年 7 月 29 日,这就是他签署逾期付款的原因 【参考方案1】:根据您对问题的描述,我得出以下查询。
select
a.name, a.paid, a.date_paid, a.overdue_date,
case
when max(b.overdue_date) is null or
max(b.overdue_date) >= a.date_paid then
'not late'
else
'late'
end as sign
from trackku as a
left join trackku as b
on a.name = b.name and a.date_paid > b.date_paid
group by a.name, a.paid, a.date_paid, a.overdue_date;
输出:
+--------+--------+------------+--------------+----------+
| name | paid | date_paid | overdue_date | sign |
+--------+--------+------------+--------------+----------+
| Bakrie | 195000 | 2019-07-01 | 2019-07-08 | not late |
| Bakrie | 195000 | 2019-07-15 | 2019-07-22 | late |
| Bakrie | 195000 | 2019-07-29 | 2019-08-05 | late |
| Bakrie | 195000 | 2019-08-05 | 2019-08-12 | not late |
| Febri | 130000 | 2019-06-25 | 2019-07-02 | not late |
| Rocky | 195000 | 2019-07-01 | 2019-07-08 | not late |
+--------+--------+------------+--------------+----------+
使用SQL Fiddle在线测试。
【讨论】:
虽然我已经尝试测试包含数据以确保此查询是正确的,并且结果与我上面的要求一致,并且结果是正确的,但感谢您帮助我,先生。 ,以上是关于如何在mysql中确定该用户本周的延迟付款的主要内容,如果未能解决你的问题,请参考以下文章