2011-11-16 50 views
0

我有列的表格:集料的日期的SQL Server 2005

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] 

我不在乎efficency我將每年做這個查詢只有一次或兩次。 這可能嗎?你會怎麼做?
非常感謝!

回答

1
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

投/轉換你的函數返回日期值根據你的數據庫的日期格式格式。

+0

這實際上甚至在SQL Server 2005上也有訣竅。非常感謝! – andreapier

1

您可以使用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,所以你不應該需要做到這一點。您是否想告訴我們TSDATETIME

+0

是的,當然是日期時間,我編輯了問題......對不起! – andreapier

+0

您的查詢給我提供這些錯誤:消息243,級別16,狀態1,行1 類型DATE不是定義的系統類型。 消息243,級別16,狀態1,行1 類型DATE不是定義的系統類型。 消息243,級別16,狀態1,行1 類型DATE不是定義的系統類型。 – andreapier

+0

您使用SQL Server 2008嗎? http://msdn.microsoft.com/en-us/library/bb630352(v=SQL.100).aspx –

相關問題