powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Datetime запрос для вывода диапазона с интервалом 10
5 сообщений из 5, страница 1 из 1
Datetime запрос для вывода диапазона с интервалом 10
    #40117802
reggeehh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
У меня есть таблица с id и двумя datetime полями first_date и second_date. Мне нужно вывести first_date и second_date, а также вывести все диапазоны с интервалом 10 минут. То есть если
first_date = 2021-11-03 12:20:00.000, а second_date = 2021-11-03 12:50:00.000. То запрос должен вывести:
1) 2021-11-03 12:20:00.000 | 2021-11-03 12:50:00.000 | 2021-11-03 12:30:00.000
2)2021-11-03 12:20:00.000 | 2021-11-03 12:50:00.000 | 2021-11-03 12:40:00.000

Реально такое сделать?
...
Рейтинг: 0 / 0
Datetime запрос для вывода диапазона с интервалом 10
    #40117834
Oleg_SQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
reggeehh,

например так:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
DECLARE @t TABLE(id          INT, 
                 first_date  DATETIME, 
                 second_date DATETIME
);
INSERT INTO @t
VALUES (1, '2021-11-03 12:20:00.000', '2021-11-03 12:50:00.000'),
       (2, '2021-11-03 15:17:00.000', '2021-11-03 16:25:00.000');

WITH cte
     AS (SELECT *, 
                cnt = DATEDIFF(MINUTE, first_date, second_date) / 10
           FROM @t),
     ints
     AS (SELECT ROW_NUMBER() OVER(
                ORDER BY 1 / 0) AS n
           FROM STRING_SPLIT(REPLICATE(CAST(' ' AS VARCHAR(MAX)), 10000 - 1), ' ') AS x)
     SELECT a.id, 
            a.first_date, 
            a.second_date, 
            xxx = DATEADD(MINUTE, b.n * 10, a.first_date)
       FROM cte AS a
            LEFT JOIN ints AS b ON a.cnt >= b.n
      WHERE a.second_date != DATEADD(MINUTE, b.n * 10, a.first_date)




Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
id          first_date              second_date             xxx
----------- ----------------------- ----------------------- -----------------------
1           2021-03-11 12:20:00.000 2021-03-11 12:50:00.000 2021-03-11 12:30:00.000
1           2021-03-11 12:20:00.000 2021-03-11 12:50:00.000 2021-03-11 12:40:00.000
2           2021-03-11 15:17:00.000 2021-03-11 16:25:00.000 2021-03-11 15:27:00.000
2           2021-03-11 15:17:00.000 2021-03-11 16:25:00.000 2021-03-11 15:37:00.000
2           2021-03-11 15:17:00.000 2021-03-11 16:25:00.000 2021-03-11 15:47:00.000
2           2021-03-11 15:17:00.000 2021-03-11 16:25:00.000 2021-03-11 15:57:00.000
2           2021-03-11 15:17:00.000 2021-03-11 16:25:00.000 2021-03-11 16:07:00.000
2           2021-03-11 15:17:00.000 2021-03-11 16:25:00.000 2021-03-11 16:17:00.000
...
Рейтинг: 0 / 0
Datetime запрос для вывода диапазона с интервалом 10
    #40117917
reggeehh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Oleg_SQL, спасибо большое, даже б не подумал за реализацию с join!
...
Рейтинг: 0 / 0
Datetime запрос для вывода диапазона с интервалом 10
    #40117921
SergiiW
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
reggeehh
б не подумал за реализацию с join
А где тут JSON?
...
Рейтинг: 0 / 0
Datetime запрос для вывода диапазона с интервалом 10
    #40117932
3unknown
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
DECLARE @t TABLE(id          INT, 
                 first_date  DATETIME, 
                 second_date DATETIME
);
INSERT INTO @t
VALUES (1, '2021-11-03 12:20:00.000', '2021-11-03 12:50:00.000'),
       (2, '2021-11-03 15:17:00.000', '2021-11-03 16:25:00.000');


;With DateCte (id,Date) As
(
    Select  id,first_date from @t 
	Union All
    Select  t.id,DateAdd(minute, 10, Date)
    From    DateCte d
	 join @t t on d.id=t.id
    Where  Date < second_date
)
Select   d.id,first_date,second_date,date
From    DateCte d
join @t t on d.id = t.id
 order by d.id
Option  (MaxRecursion 0)
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Datetime запрос для вывода диапазона с интервалом 10
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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