Для этого требуется вторая таблица.В нем будет строка для каждых часовых отметок времени, независимо от того, есть ли строки для этих отметок времени для таблицы, которую вы описали.
Скажем, ваша таблица:
CREATE TABLE [dbo].[TimeStamp](
[DateTimeHour] [int] NULL,
[Value] [int] NULL
)
И новая таблица:
CREATE TABLE [dbo].[DateTimeTally](
[DateTimeHour] [int] NULL
)
Вставьте строки втаблица TimeStamp и строки 0-23 в таблицу DateTimeTally.Итак, последний запрос:
SELECT DateTimeHour,
ISNULL((SELECT VALUE FROM TimeStamp ST1 WHERE ST1.DateTimeHour =
(SELECT MAX(DateTimeHour)FROM TimeStamp ST2
WHERE ST2.DateTimeHour <=
A.DateTimeHour)),0) Value --Not equal, actually less than or equal
FROM
(SELECT D.DateTimeHour DateTimeHour,T.Value Value FROM TimeStamp T
RIGHT OUTER JOIN DateTimeTally D
ON(T.DateTimeHour = D.DateTimeHour))A
Это возвращает:
DateTimeHour Value
----------- -----------
0 0
1 0
2 0
3 0
4 0
5 0
6 0
7 0
8 0
9 0
10 0
11 0
12 4
13 4
14 4
15 6
16 6
17 6
18 6
19 6
20 6
21 6
22 6
23 6
Надеюсь, что поможет:)