Sql 如何为过去24小时的每一行创建临时表?

Sql 如何为过去24小时的每一行创建临时表?,sql,Sql,基本上,我希望查询在过去24小时内每小时生成一行结果: 01/01/2011 00:00:00 01/01/2011 01:00:00 01/01/2011 02:00:00 ... 没有游标和临时表,我能做什么?这里是一个简单的方法 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

基本上,我希望查询在过去24小时内每小时生成一行结果:

01/01/2011 00:00:00
01/01/2011 01:00:00
01/01/2011 02:00:00
...

没有游标和临时表,我能做什么?

这里是一个简单的方法

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.

在一个特定的平台上或解决一个特定的问题可能有更好的方法,但是你必须给出更多的细节才能得到答案。

这里是一个简单的方法

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 Server上,您可以执行此操作

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
另一种稍微等同性的方法是对某些特定对象(如spt_值)的前24行使用行数排序函数

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

嗯。。。在SQL Server上,您可以执行此操作

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
另一种稍微等同性的方法是对某些特定对象(如spt_值)的前24行使用行数排序函数

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

对于给定日期的SQL Server解决方案,每小时一行

select dateadd(hour, Number, '20110101')
from master..spt_values
where type = 'P' and
      number between 0 and 23
在过去24小时内每小时生成一行


对于给定日期的SQL Server解决方案,每小时一行

select dateadd(hour, Number, '20110101')
from master..spt_values
where type = 'P' and
      number between 0 and 23
在过去24小时内每小时生成一行


行号是否从0开始?行号是否从0开始?+1用于直接使用未记录的spt值。我知道我在过去的某个地方做过类似的事情,但我还记得怎么做或在哪里做的吗?type='P'位是键。+1用于直接使用未记录的spt_值。我知道我在过去的某个地方做过类似的事情,但我还记得怎么做或在哪里做的吗?type='P'位是键。