Consulta para datediff entre filas donde el valor se mantuvo sin cambios, agrupados por el valor

Ryan Ewen:

Busco para consultar una tabla de facturas que también realiza un seguimiento de las cuales los clientes "programa" eran en el momento de sus compras (no la mejor manera de almacenar eso, sino que es lo que es y me quedo a tratar con él) .

Me gustaría ver la duración de cada cliente estaba en cada programa para.

Por ejemplo, he aquí una historia de las compras realizadas por un par de clientes. Podemos ver que los clientes estaban en diferentes programas en diferentes fechas. Tenga en cuenta que los ID de programa en realidad no son secuenciales (tal vez comienzan en un programa con una identificación más alto que el próximo programa).

invoices table:

cust_id, prog_id, datetime
1,       1,       2020-01-01      < cust 1 first seen on program 1
2,       1,       2020-01-05      < cust 2 first seen on program 1
1,       1,       2020-02-07
1,       2,       2020-02-08      < cust 1 seen on program 2 after 38 days
2,       1,       2020-02-10
2,       2,       2020-02-15      < cust 2 seen on program 2 after 41 days
1,       2,       2020-02-15
2,       2,       2020-02-15
1,       2,       2020-02-22
1,       3,       2020-02-28      < cust 1 seen on program 3 after 20 days
2,       2,       2020-03-05
2,       2,       2020-03-07
2,       3,       2020-03-15      < cust 2 seen on program 3 after 29 days
2,       3,       2020-03-17

Me gustaría ver algo como esto (hecho en mi cabeza así que espero que los cheques de matemáticas out):

cust_id, prg_id, days_on_prog
1,       1,      38
1,       2,      20
2,       1,      41
2,       2,      29
2,       3,      2

Tenga en cuenta que al cliente 1 no se ve en el programa 3 más de una vez, así que no tenemos un days_on_prog para ellos en el programa 3.

¿Puede usted ayudarme a construir una consulta de este tipo?

GMB:

Parece que la agregación debe hacer el trabajo:

select
    cust_id,
    prg_id,
    datediff(max(datetime), min(datetime)) days_on_prog
from invoices
having max(datetime) <> min(datetime)
group by cust_id, prg_id
order by cust_id, prg_id

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=351400&siteId=1
Recomendado
Clasificación