sqlserver - Restar 1 día de una fecha de marca de tiempo
restar fechas en sql server (1)
Estoy utilizando Datagrip para Postgresql. Tengo una tabla con un campo de fecha en formato de marca de hora (ex: 2016-11-01 00:00:00)
. Quiero poder:
- Aplicar un operador matemático para restar 1 día.
- Filtrarlo en base a una ventana de tiempo de hoy-130 días.
- mostrarlo sin la parte hh / mm / ss del sello (2016-10-31)
Consulta inicial actual:
select org_id, count(accounts) as count, ((date_at) - 1) as dateat
from sourcetable
where date_at <= now() - 130
group by org_id, dateat
La cláusula ((date_at)-1)
en la línea 1 da como resultado:
[42883] ERROR: el operador no existe: marca de tiempo sin zona horaria - entero Sugerencia: ningún operador coincide con el nombre y el (los) tipo (s) de argumento. Es posible que necesite agregar conversiones de tipo explícito. Posición: 69
La cláusula now()
genera un mensaje similar:
[42883] ERROR: el operador no existe: marca de tiempo con zona horaria - entero Sugerencia: ningún operador coincide con el nombre y el (los) tipo (s) de argumento. Es posible que necesite agregar conversiones de tipo explícito. Posición: ...
Las guías en línea para realizar conversiones de tipos son singularmente inútiles. Se aprecia la entrada.
Utilice el tipo de INTERVAL
para ello. P.ej:
--yesterday
SELECT NOW() - INTERVAL ''1 DAY'';
--Unrelated to the question, but PostgreSQL also supports some shortcuts:
SELECT ''yesterday''::TIMESTAMP, ''tomorrow''::TIMESTAMP, ''allballs''::TIME;
Luego puedes hacer lo siguiente en tu consulta:
SELECT
org_id,
count(accounts) AS COUNT,
((date_at) - INTERVAL ''1 DAY'') AS dateat
FROM
sourcetable
WHERE
date_at <= now() - INTERVAL ''130 DAYS''
GROUP BY
org_id,
dateat;
Punta adicional
Puedes añadir varios operandos. Ej .: ¿Cómo llegar el último día del mes actual?
SELECT date_trunc(''MONTH'', CURRENT_DATE) + INTERVAL ''1MONTH - 1DAY'';