Así que aquí tengo un caso para determinar a este usuario, es tarde o no en sus pagos cada semana, para determinar la comparación tardía con la fecha de pago y el campo vencido anterior

Tengo datos de muestra como este

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

Datos que desean ser generados.

 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

Como se ve nombre de usuario Bakrie, el pago tardío porque en la segunda fecha de pago pagada está pasando la fecha de vencimiento en la fecha de vencimiento del registro anterior de su pago

He intentado consultar así, pero fracasó. Muestra datos no tarde como este.

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

Mi consulta como esta

  select trackku.*, if(date paid > overdue_paid,'LATE','NOT LATE') from trackku

¡¿¡¿¡por favor, ayúdame!?!?!

-2
AndrewLee 26 jun. 2019 a las 18:53

1 respuesta

La mejor respuesta

Llegué a la siguiente consulta basada en su descripción del problema.

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;

Salida:

+--------+--------+------------+--------------+----------+
|  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 |
+--------+--------+------------+--------------+----------+

Pruébalo en línea con Fiddle SQL.

0
Andrei Odegov 26 jun. 2019 a las 20:04