¿Cómo obtener el número de días consecutivos a partir de la fecha actual utilizando postgres?
Quiero obtener el número de días consecutivos desde la fecha actual utilizando Postgres SQL.
Arriba se muestra el escenario en el que he resaltado que el recuento de días consecutivos debería ser así.
A continuación se muestra la consulta SQL que he creado, pero no está devolviendo el resultado esperado.
with grouped_dates as (
select user_id, created_at::timestamp::date,
(created_at::timestamp::date - (row_number() over (partition by user_id order by created_at::timestamp::date)::text || ' días')::interval)::date as grouping_date
from watch_history
)
select * , dense_rank() over (partition by grouping_date order by created_at::timestamp::date) as in_streak
from grouped_dates where user_id = 702
order by created_at::timestamp::date
¿Alguien podría ayudarme a resolver este problema?
Si de alguna manera podemos aplicar distinct a la columna created_at
en la siguiente consulta, entonces obtendré soluciones para mi problema.
WITH list AS
(
SELECT user_id,
(created_at::timestamp::date - (row_number() over (partition by user_id order by created_at::timestamp::date)::text || ' días')::interval)::date as next_day
FROM watch_history
)
SELECT user_id, count(*) AS number_of_consecutive_days
FROM list
WHERE next_day IS NOT NULL
GROUP BY user_id
¿Alguien tiene alguna idea de cómo aplicar distinct a created_at
en la consulta mencionada anteriormente?
davy.ai
Para obtener el número de días consecutivos a partir de la fecha actual en PostgreSQL, puedes utilizar la siguiente consulta SQL:
Esta consulta primero obtiene la fecha actual y ordena las fechas en orden descendente para el usuario seleccionado. Luego, agrupa las fechas según la diferencia en días entre la fecha actual y la fecha en la tabla. Finalmente, utiliza la función de ventana
count(*) OVER
para obtener la racha de días consecutivos para cada fecha y usuario. Se selecciona la racha máxima para cada usuario como el número total de días consecutivos.Nota: Reemplaza el
702
en la consulta SQL con el ID de usuario deseado.