J'ai une table avec le schéma suivant et j'ai besoin de définir une requête pouvant collecter des données basées sur des intervalles de temps (enregistrements ex. Par minute), puis fournir la somme des modifications apportées à l'instantané SnapshotValue depuis le groupe précédent. À l'heure actuelle, le SnapshotValue est toujours incréments, donc je n'ai besoin que de la somme des différences. Quelqu'un peut-il aider avec une requête SQL Server T-SQL qui pourrait faire cela? Je suis ouvert à changer le schéma, mais c'est ce que j'ai actuellement.
CaptureTime (datetime)
SnapShotValue (int)
1 Jan 2012 00:00:00, 100
1 Jan 2012 00:00:30, 125
1 Jan 2012 00:01:00, 200
1 Jan 2012 00:01:30, 300
1 Jan 2012 00:02:15, 400
1 Jan 2012 00:02:30, 425
1 Jan 2012 00:02:59, 500
1 Jan 2012 00:01:00, 225 -- Sum of all captured data changes up to the 1 minute mark
1 Jan 2012 00:02:00, 500 -- Sum of all captured data changes up to the 2 minute mark
1 Jan 2012 00:03:00, 125 -- Sum of all captured data changes up to the 3 minute mark
Je suis un peu confus par le 3ème exemple là-bas, est-ce censé être 1325? Basé sur les exigences relatives à la capture de la somme de la SnapShotValues, la requête ci-dessous devrait obtenir ce que vous avez après.
select dateadd(minute,1,convert(varchar(20),capturetime)), sum(snapshotvalue)
from snapshotdata sd
group by dateadd(minute,1,convert(varchar(20),capturetime))
Ce qui suit est la traduction de la réponse acceptée dans PostgreSQL (j'ai choisi le 1er janvier 2000, comme date de base. Changez-la à une date antérieure si vos données sont plus anciennes que cela):
SELECT
TIMESTAMP '2000-01-01 00:00:00' + 1 + DATE_PART('minute', CaptureTime - TIMESTAMP '2000-01-01 00:00:00') * INTERVAL '1 minute'
, SUM(SnapShotValue)
FROM table_name
GROUP BY TIMESTAMP '2000-01-01 00:00:00' + 1 + DATE_PART('minute', CaptureTime - TIMESTAMP '2000-01-01 00:00:00') * INTERVAL '1 minute'
ORDER BY TIMESTAMP '2000-01-01 00:00:00' + 1 + DATE_PART('minute', CaptureTime - TIMESTAMP '2000-01-01 00:00:00') * INTERVAL '1 minute'