基本上,我想查询,将在过去24小时内有一排为每小时产生的结果:如何为过去24小时的每一行制作临时表?
01/01/2011 00:00:00 01/01/2011 01:00:00 01/01/2011 02:00:00 ...
任何方式我可以做到这一点,没有游标和临时表?
基本上,我想查询,将在过去24小时内有一排为每小时产生的结果:如何为过去24小时的每一行制作临时表?
01/01/2011 00:00:00 01/01/2011 01:00:00 01/01/2011 02:00:00 ...
任何方式我可以做到这一点,没有游标和临时表?
每一行对应一个小时给定日期(SQL Server解决方案)。
select dateadd(hour, Number, '20110101')
from master..spt_values
where type = 'P' and
number between 0 and 23
结果与过去24小时
select dateadd(hour, datediff(hour, 0, getdate()) - number, 0)
from master..spt_values
where type = 'P' and
number between 0 and 23
下面是简单的方法...
SELECT '01/01/2011 00:00:00' as [hour], blah, blah2
UNION ALL
SELECT '01/01/2011 01:00:00' as [hour], blah, blah2
UNION ALL
SELECT '01/01/2011 02:00:00' as [hour], blah, blah2
UNION ALL
...etc 24 times.
在一个特定的平台或解决特定问题有可能是一个更好的办法,但你将不得不放弃更多的细节得到这个问题的答案。
嗯... SQL服务器,你可以做到这一点...
WITH cte
AS
(
SELECT CAST('1-jan-2011' AS DATETIME) AS 'date'
UNION ALL
SELECT DATEADD(hh, 1, [date]) FROM cte WHERE [date] < '1-jan-2011 23:00'
)
SELECT [date] FROM cte
...但在现实中,只有小时(0〜23)表会比较有用的,因为你可以在任何日期添加小时。
WITH cte
AS
(
SELECT 0 as 'Hour'
UNION ALL
SELECT hour + 1 FROM cte WHERE hour < 23
)
SELECT DateAdd(hh, hour, '1-jan-2010') FROM cte
另外,稍微构(isoteric)的方法是使用ROW_NUMBER排序函数对一些abitrary对象的第24行(如spt_values)...
WITH cte AS
(
SELECT n
FROM (SELECT ROW_NUMBER() OVER (ORDER BY type) FROM master..spt_values) D (n)
WHERE n < 24
)
SELECT dateadd(hh,n,'01-jan-2011') FROM cte
一排每个小时是否'ROW_NUMBER()''从开始0'? –
+1直接使用(无证)spt_values。我知道我在过去的某个地方做过这样的事情,但我能记得如何或在哪里? “type ='P'”位是关键。 –