Агрегировать по дате SQL Server 2005 - PullRequest
0 голосов
/ 16 ноября 2011

У меня есть таблица со столбцами:

ID_LOG (this is the pk) | TS (type=datetime) | VALUE (type=double) | ID_CHANNEL (unique).

Эта таблица регистрирует значения из разных каналов каждые 15 минут.Значения взяты из некоторых счетчиков, поэтому они всегда увеличиваются.
Теперь я хочу получить разницу между максимальным и минимальным значением (таким образом, чистой разницей) каждого дня прошлого года определенного канала.
Что-токак:

SELECT MAX(T1.value) - MIN(T1.value), T1.ts
FROM dbo.[LOG] as T1
WHERE T1.ts > DATEADD(year, -1, GETDATE()) and
T1.ID_CHANNEL=x      //[x being the channel i want]
GROUP BY SOMEDATEFUNCITON(T1.ts) //[SOMEDATEFUNCTION is the function that groups results by date not taking in consideration the time of timestamp but only year-month-day]

Меня не волнует эффективность, так как я буду делать этот запрос только один или два раза в год.Это возможно?А как бы вы поступили?
Большое спасибо!

Ответы [ 2 ]

1 голос
/ 16 ноября 2011
SELECT convert(char(10), creationDate, 120), COUNT(custID) AS totalRegistered
FROM dbo.SecureSignInUser
WHERE (CreationDate BETWEEN '11/1/2004' AND '11/30/2004'

GROUP BY convert(char(10), creationDate, 120)

проверьте это для вашего формата даты .. http://msdn.microsoft.com/en-us/library/ms187928.aspx

приведение / преобразование формата значения даты возврата вашей функции в соответствии с форматом даты вашей базы данных.

1 голос
/ 16 ноября 2011

Вы можете использовать CAST(T1.ts AS DATE) для усечения отметки времени.Подставляя то, что у вас есть:

SELECT MAX(T1.valore) - MIN(T1.valore), CAST(T1.ts AS DATE)
...
GROUP BY CAST(T1.ts AS DATE)

Хотя, согласно вашей схеме, TS уже DATE, поэтому вам не нужно этого делать.Вы хотели сказать нам, что TS это DATETIME?

...