2011-11-16 51 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 –

相关问题