powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Запрос на отображение записей таблицы на шкалу времени
5 сообщений из 5, страница 1 из 1
Запрос на отображение записей таблицы на шкалу времени
    #40029139
curious29
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Коллеги, прошу помочь со следующей реализацией:

Есть таблица со следующими столбцами:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
id | dt       | value1 | value2
1  | 11:58:03 | 1      | 2
2  | 11:59:14 | 3      | 4
3  | 12:01:16 | 5      | 6
4  | 12:03:45 | 7      | 8
5  | 12:04:16 | 9      | 10
6  | 12:07:43 | 11     | 12
7  | 12:07:23 | 13     | 14
8  | 12:08:59 | 15     | 16
9  | 12:09:11 | 17     | 18
10 | 12:12:22 | 19     | 20
...

Требуется создать запрос результатом работы которого будет таблица следующего вида:
Код: plaintext
1.
2.
3.
4.
5.
6.
*        | id  | dt       | value1 | value2
12:00:00 | 2   | 11:59:14 | 3      | 4
12:05:00 | 5   | 12:04:16 | 9      | 10
12:10:00 | 9   | 12:09:11 | 17     | 18
...
17:00:00 | ... | ...      | ...    | ...

Т.е. на заданный диапазон времени (например, 12:00:00-17:00:00) с заданным шагом (например, 00:05:00) надо отобразить соответствующие последние по времени записи из исходной таблицы.
...
Рейтинг: 0 / 0
Запрос на отображение записей таблицы на шкалу времени
    #40029145
Фотография Критик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
curious29,

создаете/используете уже имеющуюся таблицу номеров/дат/времени, к ней джойните имеющуюся и агрегируете
...
Рейтинг: 0 / 0
Запрос на отображение записей таблицы на шкалу времени
    #40029147
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
declare @interval int = 300; -- 5 * 60

with t as
(
 select
  b.ie, a.*,
  row_number() over (partition by b.ie order by a.dt desc) as rn
 from
  [Есть таблица со следующими столбцами] a cross apply
  (select cast(dateadd(second, @interval * (datediff(second, '00:00:00', a.dt) / @interval + 1), '00:00:00') as time)) b(ie)
)
select
 ie, id, dt, value1, value2
from
 t
where
 rn = 1;
...
Рейтинг: 0 / 0
Запрос на отображение записей таблицы на шкалу времени
    #40029184
curious29
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
invm
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
declare @interval int = 300; -- 5 * 60

with t as
(
 select
  b.ie, a.*,
  row_number() over (partition by b.ie order by a.dt desc) as rn
 from
  [Есть таблица со следующими столбцами] a cross apply
  (select cast(dateadd(second, @interval * (datediff(second, '00:00:00', a.dt) / @interval + 1), '00:00:00') as time)) b(ie)
)
select
 ie, id, dt, value1, value2
from
 t
where
 rn = 1


Код: sql
1.
order by ie asc;


для завершённости ;)
Спасибо
...
Рейтинг: 0 / 0
Запрос на отображение записей таблицы на шкалу времени
    #40029230
curious29
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
invm
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
declare @interval int = 300; -- 5 * 60

with t as
(
 select
  b.ie, a.*,
  row_number() over (partition by b.ie order by a.dt desc) as rn
 from
  [Есть таблица со следующими столбцами] a cross apply
  (select cast(dateadd(second, @interval * (datediff(second, '00:00:00', a.dt) / @interval + 1), '00:00:00') as time)) b(ie)
)
select
 ie, id, dt, value1, value2
from
 t
where
 rn = 1;



Важная оговорка: при таком подходе в таблице запроса будут пропущены (вместо указания предыдущей записи) те интервалы времени в которые не было записей в исходной таблице.

Т.е. если взять прежнюю исходную таблицу:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
id | dt       | value1 | value2
1  | 11:58:03 | 1      | 2
2  | 11:59:14 | 3      | 4
3  | 12:01:16 | 5      | 6
4  | 12:03:45 | 7      | 8
5  | 12:04:16 | 9      | 10
6  | 12:07:43 | 11     | 12
7  | 12:07:23 | 13     | 14
8  | 12:08:59 | 15     | 16
9  | 12:09:11 | 17     | 18
10 | 12:12:22 | 19     | 20
...

и меньший шаг времени (например, 1 минуту), то получим:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
*        | id | dt       | value1 | value2
11:59:00 | 1  | 11:58:03 | 1      | 2
12:00:00 | 2  | 11:59:14 | 3      | 4
 12:01:00  |
12:02:00 | 3  | 12:01:16 | 5      | 6
 12:03:00 | 
12:04:00 | 4  | 12:03:45 | 7      | 8
...

Таким образом, указанное решение можно использовать при разрешении исходных данных не большем требуемого шага времени.
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Запрос на отображение записей таблицы на шкалу времени
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]