powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Получение интервала между двумя датами SQL
18 сообщений из 18, страница 1 из 1
Получение интервала между двумя датами SQL
    #39940015
Доброе время суток!
Как получить из таково набора данных

<tr><td>statis<td>start_data<td>end_data<td>id_non
<tr><td>12<td>2020-03-14 09:00:00.000 <td> 2020-03-15 17:31:54.000 <td>1
<tr><td>12<td>2020-03-15 17:31:54.000 <td> 2020-03-15 20:31:54.000 <td>2
<tr><td>12<td>2020-03-15 20:31:54.000 <td> 2020-03-15 20:35:54.000 <td>3

получить вот такой набор данных с интервалом примерно в 1 час, если интервал между датами меньше 1 часа то его оставляем не тронутым

<tr><td>statis<td>start_data<td>end_data<td>id_non
<tr><td>12<td>2020-03-14 09:00:00.000 <td> 2020-03-14 10:00:00.000 <td>1
<tr><td>12<td>2020-03-14 10:00:00.000 <td> 2020-03-14 11:00:00.000 <td>1
<tr><td>12<td>2020-03-14 11:00:00.000 <td> 2020-03-14 12:00:00.000 <td>1
..................................
<tr><td>12<td>2020-03-15 17:00:00.000 <td> 2020-03-15 17:31:54.000 <td>1
<tr><td>12<td>2020-03-15 17:31:54.000 <td> 2020-03-15 18:31:54.000 <td>2
<tr><td>12<td>2020-03-15 18:31:54.000 <td> 2020-03-15 19:31:54.000 <td>2
<tr><td>12<td>2020-03-15 19:31:54.000 <td> 2020-03-15 20:31:54.000 <td>2
<tr><td>12<td>2020-03-15 20:31:54.000 <td> 2020-03-15 20:35:54.000 <td>3
...
Рейтинг: 0 / 0
Получение интервала между двумя датами SQL
    #39940023
Фотография PsyMisha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Иван_Перекрест,

Слушште, - ну совсем уже обленились - ну хоть от HTML-тэгов то очистите вначале, прежде чем на форум по MSSQL приходить?
Чую, - через n-лет будут вопросы от молодёжи - в стиле "ээ, - мне препод че-то там сказал, я ваще полу-понял, - сделайте чё-как за меня, а?"
...
Рейтинг: 0 / 0
Получение интервала между двумя датами SQL
    #39940025
PsyMisha,

Не знаю просто как вставить таблицу, думал получится с тегами html таблица. Отредактировать не могу чтобы убрать теги.
Мне нужен sql зарос для получение из одного набора данных в нужный набор данных, с разделением интервала времени.
...
Рейтинг: 0 / 0
Получение интервала между двумя датами SQL
    #39940026
Фотография court
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Иван_Перекрест
Не знаю просто как вставить таблицу, думал получится с тегами html таблица.
Рекомендации по оформлению сообщений в форуме
...
Рейтинг: 0 / 0
Получение интервала между двумя датами SQL
    #39940042
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Иван_Перекрест
Как получить из таково набора данных

получить вот такой набор данных с интервалом примерно в 1 час, если интервал между датами меньше 1 часа то его оставляем не тронутым
Сделайте таблицу - календарь, кросс-джойните её с набором часов, и потом это джойните с вашей таблицей.

Если нужно объяснить подробнее, сделайте тестовый скрипт с временной таблицей, заполненной данными.
...
Рейтинг: 0 / 0
Получение интервала между двумя датами SQL
    #39940061
statis | start_data | end_data | id_non
12 | 2020-03-14 09:00:00.000 | 2020-03-15 17:31:54.000 | 1
12 | 2020-03-15 17:31:54.000 | 2020-03-15 20:31:54.000 | 2
12 | 2020-03-15 20:31:54.000 | 2020-03-15 20:35:54.000 | 3

получить вот такой набор данных с интервалом примерно в 1 час, если интервал между датами меньше 1 часа то его оставляем не тронутым

statis | start_data | end_data | id_non
12 | 2020-03-14 09:00:00.000 | 2020-03-14 10:00:00.000 | 1
12 | 2020-03-14 10:00:00.000 | 2020-03-14 11:00:00.000 | 1
12 | 2020-03-14 11:00:00.000 | 2020-03-14 12:00:00.000 | 1
..................................
12 | 2020-03-15 17:00:00.000 | 2020-03-15 17:31:54.000 | 1
12 | 2020-03-15 17:31:54.000 | 2020-03-15 18:31:54.000 | 2
12 | 2020-03-15 18:31:54.000 | 2020-03-15 19:31:54.000 | 2
12 | 2020-03-15 19:31:54.000 | 2020-03-15 20:31:54.000 | 2
12 | 2020-03-15 20:31:54.000 | 2020-03-15 20:35:54.000 | 3
...
Рейтинг: 0 / 0
Получение интервала между двумя датами SQL
    #39940065
Фотография court
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник

Иван_Перекрест
statis start_data end_data id_non12 2020-03-14 09:00:00.000 2020-03-15 17:31:54.000 112 2020-03-15 17:31:54.000 2020-03-15 20:31:54.000 212 2020-03-15 20:31:54.000 2020-03-15 20:35:54.000 3


получить вот такой набор данных с интервалом примерно в 1 час, если интервал между датами меньше 1 часа то его оставляем не тронутым

statis start_data end_data id_non12 2020-03-14 09:00:00.000 2020-03-14 10:00:00.000 112 2020-03-14 10:00:00.000 2020-03-14 11:00:00.000 112 2020-03-14 11:00:00.000 2020-03-14 12:00:00.000 1..................................12 2020-03-15 17:00:00.000 2020-03-15 17:31:54.000 112 2020-03-15 17:31:54.000 2020-03-15 18:31:54.000 212 2020-03-15 18:31:54.000 2020-03-15 19:31:54.000 212 2020-03-15 19:31:54.000 2020-03-15 20:31:54.000 212 2020-03-15 20:31:54.000 2020-03-15 20:35:54.000 3
...
Рейтинг: 0 / 0
Получение интервала между двумя датами SQL
    #39940067
Фотография court
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
set dateformat ymd

declare @t table (statis int,	start_data datetime,	end_data datetime,	id_non int)
insert into @t values
(12,	'2020-03-14 09:00:00.000',	'2020-03-15 17:31:54.000',	1),
(12,	'2020-03-15 17:31:54.000',	'2020-03-15 20:31:54.000',	2),
(12,	'2020-03-15 20:31:54.000',	'2020-03-15 20:35:54.000',	3)

select * from @t

--
select
	statis
	,dateadd(hour, a.n, start_data) as start_data
	,case when dateadd(hour, a.n+1, start_data) > end_data then end_data else dateadd(hour, a.n+1, start_data) end as end_data
	,id_non
from @t t
cross apply (select n from [dbo].[GetNums](0, datediff(hour, t.start_data, t.end_data))) a 
/* ? если  start_data = end_data то должна строка попасть в выборку ? */
where dateadd(hour, a.n, start_data) < case when dateadd(hour, a.n+1, start_data) > end_data then end_data else dateadd(hour, a.n+1, start_data) end



statisstart_dataend_dataid_non122020-03-14 09:00:00.0002020-03-14 10:00:00.0001122020-03-14 10:00:00.0002020-03-14 11:00:00.0001122020-03-14 11:00:00.0002020-03-14 12:00:00.0001122020-03-14 12:00:00.0002020-03-14 13:00:00.0001122020-03-14 13:00:00.0002020-03-14 14:00:00.0001122020-03-14 14:00:00.0002020-03-14 15:00:00.0001122020-03-14 15:00:00.0002020-03-14 16:00:00.0001122020-03-14 16:00:00.0002020-03-14 17:00:00.0001122020-03-14 17:00:00.0002020-03-14 18:00:00.0001122020-03-14 18:00:00.0002020-03-14 19:00:00.0001122020-03-14 19:00:00.0002020-03-14 20:00:00.0001122020-03-14 20:00:00.0002020-03-14 21:00:00.0001122020-03-14 21:00:00.0002020-03-14 22:00:00.0001122020-03-14 22:00:00.0002020-03-14 23:00:00.0001122020-03-14 23:00:00.0002020-03-15 00:00:00.0001122020-03-15 00:00:00.0002020-03-15 01:00:00.0001122020-03-15 01:00:00.0002020-03-15 02:00:00.0001122020-03-15 02:00:00.0002020-03-15 03:00:00.0001122020-03-15 03:00:00.0002020-03-15 04:00:00.0001122020-03-15 04:00:00.0002020-03-15 05:00:00.0001122020-03-15 05:00:00.0002020-03-15 06:00:00.0001122020-03-15 06:00:00.0002020-03-15 07:00:00.0001122020-03-15 07:00:00.0002020-03-15 08:00:00.0001122020-03-15 08:00:00.0002020-03-15 09:00:00.0001122020-03-15 09:00:00.0002020-03-15 10:00:00.0001122020-03-15 10:00:00.0002020-03-15 11:00:00.0001122020-03-15 11:00:00.0002020-03-15 12:00:00.0001122020-03-15 12:00:00.0002020-03-15 13:00:00.0001122020-03-15 13:00:00.0002020-03-15 14:00:00.0001122020-03-15 14:00:00.0002020-03-15 15:00:00.0001122020-03-15 15:00:00.0002020-03-15 16:00:00.0001122020-03-15 16:00:00.0002020-03-15 17:00:00.0001122020-03-15 17:00:00.0002020-03-15 17:31:54.0001122020-03-15 17:31:54.0002020-03-15 18:31:54.0002122020-03-15 18:31:54.0002020-03-15 19:31:54.0002122020-03-15 19:31:54.0002020-03-15 20:31:54.0002122020-03-15 20:31:54.0002020-03-15 20:35:54.0003
...
Рейтинг: 0 / 0
Получение интервала между двумя датами SQL
    #39940075
court,
[dbo].[GetNums] что хранится вот в этой таблице?

/* ? если start_data = end_data то должна строка попасть в выборку ? */
они не могут быть одинаковые, все равно будут от лечатся на мили секунды
...
Рейтинг: 0 / 0
Получение интервала между двумя датами SQL
    #39940077
Фотография court
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Иван_Перекрест
[dbo].[GetNums] что хранится вот в этой таблице?
это не таблица
Это табл.функция.
Заряди GetNums в поиск по форуму

Иван_Перекрест
они не могут быть одинаковые, все равно будут от лечатся на мили секунды

я не про исх.данные, а про результат
Без условия where запрос вернет ещё одну запись

statisstart_dataend_dataid_non122020-03-14 09:00:00.0002020-03-14 10:00:00.0001122020-03-14 10:00:00.0002020-03-14 11:00:00.0001122020-03-14 11:00:00.0002020-03-14 12:00:00.0001122020-03-14 12:00:00.0002020-03-14 13:00:00.0001122020-03-14 13:00:00.0002020-03-14 14:00:00.0001122020-03-14 14:00:00.0002020-03-14 15:00:00.0001122020-03-14 15:00:00.0002020-03-14 16:00:00.0001122020-03-14 16:00:00.0002020-03-14 17:00:00.0001122020-03-14 17:00:00.0002020-03-14 18:00:00.0001122020-03-14 18:00:00.0002020-03-14 19:00:00.0001122020-03-14 19:00:00.0002020-03-14 20:00:00.0001122020-03-14 20:00:00.0002020-03-14 21:00:00.0001122020-03-14 21:00:00.0002020-03-14 22:00:00.0001122020-03-14 22:00:00.0002020-03-14 23:00:00.0001122020-03-14 23:00:00.0002020-03-15 00:00:00.0001122020-03-15 00:00:00.0002020-03-15 01:00:00.0001122020-03-15 01:00:00.0002020-03-15 02:00:00.0001122020-03-15 02:00:00.0002020-03-15 03:00:00.0001122020-03-15 03:00:00.0002020-03-15 04:00:00.0001122020-03-15 04:00:00.0002020-03-15 05:00:00.0001122020-03-15 05:00:00.0002020-03-15 06:00:00.0001122020-03-15 06:00:00.0002020-03-15 07:00:00.0001122020-03-15 07:00:00.0002020-03-15 08:00:00.0001122020-03-15 08:00:00.0002020-03-15 09:00:00.0001122020-03-15 09:00:00.0002020-03-15 10:00:00.0001122020-03-15 10:00:00.0002020-03-15 11:00:00.0001122020-03-15 11:00:00.0002020-03-15 12:00:00.0001122020-03-15 12:00:00.0002020-03-15 13:00:00.0001122020-03-15 13:00:00.0002020-03-15 14:00:00.0001122020-03-15 14:00:00.0002020-03-15 15:00:00.0001122020-03-15 15:00:00.0002020-03-15 16:00:00.0001122020-03-15 16:00:00.0002020-03-15 17:00:00.0001122020-03-15 17:00:00.0002020-03-15 17:31:54.0001122020-03-15 17:31:54.0002020-03-15 18:31:54.0002122020-03-15 18:31:54.0002020-03-15 19:31:54.0002122020-03-15 19:31:54.0002020-03-15 20:31:54.0002122020-03-15 20:31:54.0002020-03-15 20:31:54.0002122020-03-15 20:31:54.0002020-03-15 20:35:54.0003
...
Рейтинг: 0 / 0
Получение интервала между двумя датами SQL
    #39940079
court,
повторную запись нужно убирать.
...
Рейтинг: 0 / 0
Получение интервала между двумя датами SQL
    #39940143
в таблице еще существует запись NULL и запрос выдает ошибку
Msg 1014, Level 15, State 1, Line 1
A TOP or FETCH clause contains an invalid value.
NULL нужно подменивать на GETDATE
Код: sql
1.
2.
3.
4.
5.
declare @t table (statis int,	start_data datetime,	end_data datetime,	id_non int)
insert into @t values
(12,	'2020-03-14 09:00:00.000',	'2020-03-15 17:31:54.000',	1),
(12,	'2020-03-15 17:31:54.000',	'2020-03-15 20:31:54.000',	2),
(12,	'2020-03-15 20:31:54.000',	'NULL',	3)
...
Рейтинг: 0 / 0
Получение интервала между двумя датами SQL
    #39940459
court
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
set dateformat ymd

declare @t table (statis int,	start_data datetime,	end_data datetime,	id_non int)
insert into @t values
(12,	'2020-03-14 09:00:00.000',	'2020-03-15 17:31:54.000',	1),
(12,	'2020-03-15 17:31:54.000',	'2020-03-15 20:31:54.000',	2),
(12,	'2020-03-15 20:31:54.000',	'2020-03-15 20:35:54.000',	3)

select * from @t

--
select
	statis
	,dateadd(hour, a.n, start_data) as start_data
	,case when dateadd(hour, a.n+1, start_data) > end_data then end_data else dateadd(hour, a.n+1, start_data) end as end_data
	,id_non
from @t t
cross apply (select n from [dbo].[GetNums](0, datediff(hour, t.start_data, t.end_data))) a 
/* ? если  start_data = end_data то должна строка попасть в выборку ? */
where dateadd(hour, a.n, start_data) < case when dateadd(hour, a.n+1, start_data) > end_data then end_data else dateadd(hour, a.n+1, start_data) end






statiststart_datatend_datatid_non12t2020-03-14 09:00:00.000t2020-03-14 10:00:00.000t112t2020-03-14 10:00:00.000t2020-03-14 11:00:00.000t112t2020-03-14 11:00:00.000t2020-03-14 12:00:00.000t112t2020-03-14 12:00:00.000t2020-03-14 13:00:00.000t112t2020-03-14 13:00:00.000t2020-03-14 14:00:00.000t112t2020-03-14 14:00:00.000t2020-03-14 15:00:00.000t112t2020-03-14 15:00:00.000t2020-03-14 16:00:00.000t112t2020-03-14 16:00:00.000t2020-03-14 17:00:00.000t112t2020-03-14 17:00:00.000t2020-03-14 18:00:00.000t112t2020-03-14 18:00:00.000t2020-03-14 19:00:00.000t112t2020-03-14 19:00:00.000t2020-03-14 20:00:00.000t112t2020-03-14 20:00:00.000t2020-03-14 21:00:00.000t112t2020-03-14 21:00:00.000t2020-03-14 22:00:00.000t112t2020-03-14 22:00:00.000t2020-03-14 23:00:00.000t112t2020-03-14 23:00:00.000t2020-03-15 00:00:00.000t112t2020-03-15 00:00:00.000t2020-03-15 01:00:00.000t112t2020-03-15 01:00:00.000t2020-03-15 02:00:00.000t112t2020-03-15 02:00:00.000t2020-03-15 03:00:00.000t112t2020-03-15 03:00:00.000t2020-03-15 04:00:00.000t112t2020-03-15 04:00:00.000t2020-03-15 05:00:00.000t112t2020-03-15 05:00:00.000t2020-03-15 06:00:00.000t112t2020-03-15 06:00:00.000t2020-03-15 07:00:00.000t112t2020-03-15 07:00:00.000t2020-03-15 08:00:00.000t112t2020-03-15 08:00:00.000t2020-03-15 09:00:00.000t112t2020-03-15 09:00:00.000t2020-03-15 10:00:00.000t112t2020-03-15 10:00:00.000t2020-03-15 11:00:00.000t112t2020-03-15 11:00:00.000t2020-03-15 12:00:00.000t112t2020-03-15 12:00:00.000t2020-03-15 13:00:00.000t112t2020-03-15 13:00:00.000t2020-03-15 14:00:00.000t112t2020-03-15 14:00:00.000t2020-03-15 15:00:00.000t112t2020-03-15 15:00:00.000t2020-03-15 16:00:00.000t112t2020-03-15 16:00:00.000t2020-03-15 17:00:00.000t112t2020-03-15 17:00:00.000t2020-03-15 17:31:54.000t112t2020-03-15 17:31:54.000t2020-03-15 18:31:54.000t212t2020-03-15 18:31:54.000t2020-03-15 19:31:54.000t212t2020-03-15 19:31:54.000t2020-03-15 20:31:54.000t212t2020-03-15 20:31:54.000t2020-03-15 20:35:54.000t3

А как сделать в запросе проверку времени смены 12 часов

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
set dateformat ymd

declare @t table (statis int,	start_data datetime,	end_data datetime,	id_non int)
insert into @t values
(12,	'2020-03-14 07:00:00.000',	'2020-03-15 07:36:00.000',	1), -- тут надо разделить статус до 07:30:00 и после 07:30:00
(12,	'2020-03-15 07:36:00.000',	'2020-03-15 20:31:54.000',	2), -- так как этот статус попал в промежуток с  07:30:00 до 19:30:00 необходимо обрезать его и начать новый с 19:30:00 и продолжить его  до завершение end_data
(12,	'2020-03-15 20:31:54.000',	'2020-03-15 20:35:54.000',	3)

select * from @t


таблица должна получится

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
set dateformat ymd

declare @t table (statis int,	start_data datetime,	end_data datetime,	id_non int)
insert into @t values
(12,	'2020-03-14 07:00:00.000',	'2020-03-15 07:30:00.000',	1),
(12,	'2020-03-14 07:30:00.000',	'2020-03-15 07:36:00.000',	1),
(12,	'2020-03-15 07:36:00.000',	'2020-03-15 19:30:00.000',	2),
(12,	'2020-03-15 19:30:00.000',	'2020-03-15 20:31:54.000',	2), 
(12,	'2020-03-15 20:31:54.000',	'2020-03-15 20:35:54.000',	3)

select * from @t
...
Рейтинг: 0 / 0
Получение интервала между двумя датами SQL
    #39940466
Фотография court
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Иван_Перекрест,

друган, ты знаешь что такое "вопросительный знак" ?
...
Рейтинг: 0 / 0
Получение интервала между двумя датами SQL
    #39940472
Фотография court
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Иван_Перекрест
court
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
set dateformat ymd

declare @t table (statis int,	start_data datetime,	end_data datetime,	id_non int)
insert into @t values
(12,	'2020-03-14 09:00:00.000',	'2020-03-15 17:31:54.000',	1),
(12,	'2020-03-15 17:31:54.000',	'2020-03-15 20:31:54.000',	2),
(12,	'2020-03-15 20:31:54.000',	'2020-03-15 20:35:54.000',	3)

select * from @t

--
select
	statis
	,dateadd(hour, a.n, start_data) as start_data
	,case when dateadd(hour, a.n+1, start_data) > end_data then end_data else dateadd(hour, a.n+1, start_data) end as end_data
	,id_non
from @t t
cross apply (select n from [dbo].[GetNums](0, datediff(hour, t.start_data, t.end_data))) a 
/* ? если  start_data = end_data то должна строка попасть в выборку ? */
where dateadd(hour, a.n, start_data) < case when dateadd(hour, a.n+1, start_data) > end_data then end_data else dateadd(hour, a.n+1, start_data) end







statiststart_datatend_datatid_non12t2020-03-14 09:00:00.000t2020-03-14 10:00:00.000t112t2020-03-14 10:00:00.000t2020-03-14 11:00:00.000t112t2020-03-14 11:00:00.000t2020-03-14 12:00:00.000t112t2020-03-14 12:00:00.000t2020-03-14 13:00:00.000t112t2020-03-14 13:00:00.000t2020-03-14 14:00:00.000t112t2020-03-14 14:00:00.000t2020-03-14 15:00:00.000t112t2020-03-14 15:00:00.000t2020-03-14 16:00:00.000t112t2020-03-14 16:00:00.000t2020-03-14 17:00:00.000t112t2020-03-14 17:00:00.000t2020-03-14 18:00:00.000t112t2020-03-14 18:00:00.000t2020-03-14 19:00:00.000t112t2020-03-14 19:00:00.000t2020-03-14 20:00:00.000t112t2020-03-14 20:00:00.000t2020-03-14 21:00:00.000t112t2020-03-14 21:00:00.000t2020-03-14 22:00:00.000t112t2020-03-14 22:00:00.000t2020-03-14 23:00:00.000t112t2020-03-14 23:00:00.000t2020-03-15 00:00:00.000t112t2020-03-15 00:00:00.000t2020-03-15 01:00:00.000t112t2020-03-15 01:00:00.000t2020-03-15 02:00:00.000t112t2020-03-15 02:00:00.000t2020-03-15 03:00:00.000t112t2020-03-15 03:00:00.000t2020-03-15 04:00:00.000t112t2020-03-15 04:00:00.000t2020-03-15 05:00:00.000t112t2020-03-15 05:00:00.000t2020-03-15 06:00:00.000t112t2020-03-15 06:00:00.000t2020-03-15 07:00:00.000t112t2020-03-15 07:00:00.000t2020-03-15 08:00:00.000t112t2020-03-15 08:00:00.000t2020-03-15 09:00:00.000t112t2020-03-15 09:00:00.000t2020-03-15 10:00:00.000t112t2020-03-15 10:00:00.000t2020-03-15 11:00:00.000t112t2020-03-15 11:00:00.000t2020-03-15 12:00:00.000t112t2020-03-15 12:00:00.000t2020-03-15 13:00:00.000t112t2020-03-15 13:00:00.000t2020-03-15 14:00:00.000t112t2020-03-15 14:00:00.000t2020-03-15 15:00:00.000t112t2020-03-15 15:00:00.000t2020-03-15 16:00:00.000t112t2020-03-15 16:00:00.000t2020-03-15 17:00:00.000t112t2020-03-15 17:00:00.000t2020-03-15 17:31:54.000t112t2020-03-15 17:31:54.000t2020-03-15 18:31:54.000t212t2020-03-15 18:31:54.000t2020-03-15 19:31:54.000t212t2020-03-15 19:31:54.000t2020-03-15 20:31:54.000t212t2020-03-15 20:31:54.000t2020-03-15 20:35:54.000t3

А как сделать в запросе проверку времени смены 12 часов

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
set dateformat ymd

declare @t table (statis int,	start_data datetime,	end_data datetime,	id_non int)
insert into @t values
(12,	'2020-03-14 07:00:00.000',	'2020-03-15 07:36:00.000',	1), -- тут надо разделить статус до 07:30:00 и после 07:30:00
(12,	'2020-03-15 07:36:00.000',	'2020-03-15 20:31:54.000',	2), -- так как этот статус попал в промежуток с  07:30:00 до 19:30:00 необходимо обрезать его и начать новый с 19:30:00 и продолжить его  до завершение end_data
(12,	'2020-03-15 20:31:54.000',	'2020-03-15 20:35:54.000',	3)

select * from @t



таблица должна получится

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
set dateformat ymd

declare @t table (statis int,	start_data datetime,	end_data datetime,	id_non int)
insert into @t values
(12,	'2020-03-14 07:00:00.000',	'2020-03-15 07:30:00.000',	1),
(12,	'2020-03-14 07:30:00.000',	'2020-03-15 07:36:00.000',	1),
(12,	'2020-03-15 07:36:00.000',	'2020-03-15 19:30:00.000',	2),
(12,	'2020-03-15 19:30:00.000',	'2020-03-15 20:31:54.000',	2), 
(12,	'2020-03-15 20:31:54.000',	'2020-03-15 20:35:54.000',	3)

select * from @t

... и где тут "12 часов" ...
...
Рейтинг: 0 / 0
Получение интервала между двумя датами SQL
    #39940511
court,
Ошибку допустил
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
set dateformat ymd

declare @t table (statis int,	start_data datetime,	end_data datetime,	id_non int)
insert into @t values
(12,	'2020-03-15 07:00:00.000',	'2020-03-15 07:36:00.000',	1), -- тут надо разделить статус до 07:30:00 и после 07:30:00
(12,	'2020-03-15 07:36:00.000',	'2020-03-15 20:31:54.000',	2), -- так как этот статус попал в промежуток с  07:30:00 до 19:30:00 необходимо обрезать его и начать новый с 19:30:00 и продолжить его  до завершение end_data
(12,	'2020-03-15 20:31:54.000',	'2020-03-15 20:35:54.000',	3)
(12,	'2020-03-15 20:35:54.000',	'2020-03-16 07:40:00.000',	4)

select * from @t



Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
set dateformat ymd

declare @t table (statis int,	start_data datetime,	end_data datetime,	id_non int)
insert into @t values
(12,	'2020-03-15 07:00:00.000',	'2020-03-15 07:30:00.000',	1),
(12,	'2020-03-15 07:30:00.000',	'2020-03-15 07:36:00.000',	1),
(12,	'2020-03-15 07:36:00.000',	'2020-03-15 19:30:00.000',	2),
(12,	'2020-03-15 19:30:00.000',	'2020-03-15 20:31:54.000',	2), 
(12,	'2020-03-15 20:31:54.000',	'2020-03-15 19:30:00.000',	3),
(12,	'2020-03-15 19:30:00.000',	'2020-03-15 20:35:54.000',	3),
(12,	'2020-03-15 20:35:54.000',	'2020-03-16 07:30:00.000',	4),
(12,	'2020-03-16 07:30:00.000',	'2020-03-16 07:40:00.000',	4)

select * from @t



12 часов должно начинаться с start_data 07:30 по end_data 19:30 в этот промежуток должны попасть все записи в таблице соответственно, с делением времени, если запись начало start_data 07:00 и конец end_data 07:35 ее нужно разделить до и после,
но нужно делать как и за определенную дату так и за интервал дат
...
Рейтинг: 0 / 0
Получение интервала между двумя датами SQL
    #39940682
Фотография court
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Иван_Перекрест,

просто в исх. запросе, замени везде a.n на a.n * 12
...
Рейтинг: 0 / 0
Получение интервала между двумя датами SQL
    #39940845
court,

Добрый день!
Попробовал поставить a.n*12, то от start_data вычисляется 12 часов и формируется end_data а остальное время просто обрезается и новая строчка не формируется. Так не пойдет.
Может создать функцию? которая будет выявлять и формировать статусы перетекающие из смены в смену.


Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
set dateformat ymd

declare @t table (statis int,	start_data datetime,	end_data datetime,	id_non int)
insert into @t values
(12,	'2020-03-15 07:00:00.000',	'2020-03-15 07:36:00.000',	1), -- тут время перетикает статуса  одной смены в другую до 07:30:00 и после 07:30:00 этот статус нужно поделить до и после
(12,	'2020-03-15 07:36:00.000',	'2020-03-15 20:31:54.000',	2), -- так как этот статус попал в промежуток с  07:30:00 до 19:30:00 необходимо обрезать его и начать новый с 19:30:00 и продолжить его  до завершение end_data или следующей смены 
(12,	'2020-03-15 20:31:54.000',	'2020-03-15 20:35:54.000',	3),
(12,	'2020-03-15 20:35:54.000',	'2020-03-16 07:40:00.000',	4)

select * from @t


12 2020-03-15 07:00:00.000 2020-03-15 07:36:00.000 112 2020-03-15 07:36:00.000 2020-03-15 20:31:54.000 212 2020-03-15 20:31:54.000 2020-03-15 20:35:54.000 312 2020-03-15 20:35:54.000 2020-03-16 07:40:00.000 4
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
set dateformat ymd

declare @t table (statis int,	start_data datetime,	end_data datetime,	id_non int)
insert into @t values
(12,	'2020-03-15 07:00:00.000',	'2020-03-15 07:30:00.000',	1), --это отнесется к 2 смене
(12,	'2020-03-15 07:30:00.000',	'2020-03-15 07:36:00.000',	1), --это отнесется к 1 смене
(12,	'2020-03-15 07:36:00.000',	'2020-03-15 19:30:00.000',	2), --это отнесется к 1 смене
(12,	'2020-03-15 19:30:00.000',	'2020-03-15 20:31:54.000',	2), -- это отнесется к 2 смене
(12,	'2020-03-15 20:31:54.000',	'2020-03-15 20:35:54.000',	3),  --это отнесется к 2 смене
(12,	'2020-03-15 20:35:54.000',	'2020-03-16 07:30:00.000',	4), --это отнесется к 2 смене
(12,	'2020-03-16 07:30:00.000',	'2020-03-16 07:40:00.000',	4)  --это отнесется к 1 смене

select * from @t


12 2020-03-15 07:00:00.000 2020-03-15 07:30:00.000 112 2020-03-15 07:30:00.000 2020-03-15 07:36:00.000 112 2020-03-15 07:36:00.000 2020-03-15 19:30:00.000 212 2020-03-15 19:30:00.000 2020-03-15 20:31:54.000 212 2020-03-15 20:31:54.000 2020-03-15 20:35:54.000 312 2020-03-15 20:35:54.000 2020-03-16 07:30:00.000 412 2020-03-16 07:30:00.000 2020-03-16 07:40:00.000 4
...
Рейтинг: 0 / 0
18 сообщений из 18, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Получение интервала между двумя датами SQL
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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