powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Учет работы единиц оборудования
13 сообщений из 13, страница 1 из 1
Учет работы единиц оборудования
    #39708242
Const123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
CREATE TABLE [dbo].[Orderz](
[code] [nvarchar](255) NULL,
[StartTime] [datetime] NULL,
[FinishTime] [datetime] NULL
)
Insert into Orderz ([code],[StartTime],[FinishTime]) VALUES ('Code1',	'2018-09-25 00:38:39.000',	'2018-09-25 01:20:13.000')
Insert into Orderz ([code],[StartTime],[FinishTime]) VALUES ('Code1',	'2018-09-25 00:40:52.000',	'2018-09-25 01:22:19.000')
Insert into Orderz ([code],[StartTime],[FinishTime]) VALUES ('Code1',	'2018-09-25 00:47:56.000',	'2018-09-25 01:36:55.000')
Insert into Orderz ([code],[StartTime],[FinishTime]) VALUES ('Code1',	'2018-09-25 01:01:14.000',	'2018-09-25 01:41:46.000')
Insert into Orderz ([code],[StartTime],[FinishTime]) VALUES ('Code1',	'2018-09-24 21:15:30.000',	'2018-09-25 01:46:50.000')
Insert into Orderz ([code],[StartTime],[FinishTime]) VALUES ('Code1',	'2018-09-25 01:01:14.000',	'2018-09-25 01:46:50.000')
Insert into Orderz ([code],[StartTime],[FinishTime]) VALUES ('Code1',	'2018-09-25 01:01:27.000',	'2018-09-25 02:00:29.000')
Insert into Orderz ([code],[StartTime],[FinishTime]) VALUES ('Code1',	'2018-09-24 20:49:54.000',	'2018-09-25 02:00:31.000')
Insert into Orderz ([code],[StartTime],[FinishTime]) VALUES ('Code1',	'2018-09-25 01:01:28.000',	'2018-09-25 02:04:41.000')
Insert into Orderz ([code],[StartTime],[FinishTime]) VALUES ('Code1',	'2018-09-25 01:01:28.000',	'2018-09-25 05:58:40.000')
Insert into Orderz ([code],[StartTime],[FinishTime]) VALUES ('Code1',	'2018-09-24 08:15:00.000',	'2018-09-25 09:23:14.000')



Надо в итоге при Select'е получить такую выборку:
'Code1', '2018-09-24 20:49:54.000', '2018-09-25 05:58:40.000'
'Code1', '2018-09-24 08:15:00.000', '2018-09-25 09:23:14.000'

Заранее спасибо и прошу прощения за предоставленные неудобства.

Сорри за оффтопик, но поймите, на форуме могут встречаться вопросы от людей, для которых T-SQL не является профильным языком программирования и решать связанные с ним вопросы приходится эпизодически. В частности многие SCADA системы предоставляют язык sql запросов формата ansi-99 для решения допзадач, хотя их основной язык - какой-нибудь скриптовой.
Яркий пример - WinCC.

Модератор: Повтор, первая тема была тут . Пока оставлю открытой, может кто за автора и попользуется поиском.
...
Рейтинг: 0 / 0
Учет работы единиц оборудования
    #39708248
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Const123Надо в итоге при Select'е получить такую выборку:
'Code1', '2018-09-24 20:49:54.000', '2018-09-25 05:58:40.000'
'Code1', '2018-09-24 08:15:00.000', '2018-09-25 09:23:14.000'

Сорри за оффтопик, но поймите, на форуме могут встречаться вопросы от людей, для которых T-SQL не является профильным языком программирования и решать связанные с ним вопросы приходится эпизодически.Но по русски-то эти "люди" могут описать алгоритм получения нужных данных?
...
Рейтинг: 0 / 0
Учет работы единиц оборудования
    #39708250
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvgConst123Надо в итоге при Select'е получить такую выборку:
'Code1', '2018-09-24 20:49:54.000', '2018-09-25 05:58:40.000'
'Code1', '2018-09-24 08:15:00.000', '2018-09-25 09:23:14.000'

Сорри за оффтопик, но поймите, на форуме могут встречаться вопросы от людей, для которых T-SQL не является профильным языком программирования и решать связанные с ним вопросы приходится эпизодически.Но по русски-то эти "люди" могут описать алгоритм получения нужных данных?
пусть угадывают, не барское это дело. Кстати для "не желающих" есть форум работа.
...
Рейтинг: 0 / 0
Учет работы единиц оборудования
    #39708293
Const123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
TaPaK,
Вроде все понятно из результирующей выборки:
надо объединить пересекающиеся интервалы и выделить отдельно не пересекающиеся.
Оффтоп: а не факт, что сами не столкнетесь с такой же ситуацией, когда требуется срочная помощь, а вам просто посоветуют как типа правильно жить. Жизнь - штука сложная, за всякое праздно сказанное слово рано или поздно придется ответить. Не стоит жить по принципу: упавшего - добей.
...
Рейтинг: 0 / 0
Учет работы единиц оборудования
    #39708298
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Const123,
авторнадо объединить пересекающиеся интервалы и выделить отдельно не пересекающиеся
как по мне тут всё пересекается
'Code1', '2018-09-24 20:49:54.000', '2018-09-25 05:58:40.000'
'Code1', '2018-09-24 08:15:00.000', '2018-09-25 09:23:14.000'
...
Рейтинг: 0 / 0
Учет работы единиц оборудования
    #39708308
982183
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Только вчера Akina ответ дал
21684663
...
Рейтинг: 0 / 0
Учет работы единиц оборудования
    #39708317
Const123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
TaPaK,
прошу прощения, число во втором значении результирующей выборки не так поставил:
'Code1', '2018-09-24 20:49:54.000', '2018-09-25 05:58:40.000'
'Code1', '2018-09-25 08:15:00.000', '2018-09-25 09:23:14.000'
...
Рейтинг: 0 / 0
Учет работы единиц оборудования
    #39708625
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Const123TaPaK,
прошу прощения, число во втором значении результирующей выборки не так поставил:
'Code1', '2018-09-24 20:49:54.000', '2018-09-25 05:58:40.000'
'Code1', '2018-09-25 08:15:00.000', '2018-09-25 09:23:14.000'
А разве не так должно получиться?

'Code1', '2018-09-24 20:49:54.000', '2018-09-25 05:58:40.000'

Присоединяюсь:
TaPaKкак по мне тут всё пересекается
...
Рейтинг: 0 / 0
Учет работы единиц оборудования
    #39708634
Посетитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvgConst123TaPaK,
прошу прощения, число во втором значении результирующей выборки не так поставил:
'Code1', '2018-09-24 20:49:54.000', '2018-09-25 05:58:40.000'
'Code1', '2018-09-25 08:15:00.000', '2018-09-25 09:23:14.000'
А разве не так должно получиться?

'Code1', '2018-09-24 20:49:54.000', '2018-09-25 05:58:40.000'

Присоединяюсь:
TaPaKкак по мне тут всё пересекается

одно из двух.
или 2018-09-24 08:15:00.000 надо читать как 2018-09-25 08:15:00.000
или должен быть один диапазон

Code1 2018-09-24 08:15:00.000 2018-09-25 09:23:14.000

, так как он поглощает все остальные
...
Рейтинг: 0 / 0
Учет работы единиц оборудования
    #39708951
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Посетительодно из двух.
или 2018-09-24 08:15:00.000 надо читать как 2018-09-25 08:15:00.000
Тогда будет всё равно один диапазон, только от '2018-09-24 20:49:54.000'

Поэтому я и спросил автора про формулировку алгоритма.

А когда алгоритм будет описан на русском, то и закодировать его будет легко.
...
Рейтинг: 0 / 0
Учет работы единиц оборудования
    #39708955
982183
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так он описал
Const123надо объединить пересекающиеся интервалы и выделить отдельно не пересекающиеся.

Только тестовые данные дал неверные.
...
Рейтинг: 0 / 0
Учет работы единиц оборудования
    #39709168
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
982183Так он описал
Const123надо объединить пересекающиеся интервалы и выделить отдельно не пересекающиеся.

Только тестовые данные дал неверные.Это не алгоритм, а задача.

Но в общем алгоритм действительно тут несложный.
Можно сделать, например, в цикле (конечно, нужно добавить уникальный ИД, надеюсь, он же есть?):

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
CREATE TABLE #Orderz(
[id] int not null identity primary key,
[code] [nvarchar](255) NULL,
[StartTime] [datetime] NULL,
[FinishTime] [datetime] NULL
)
go
Insert into #Orderz ([code],[StartTime],[FinishTime]) VALUES ('Code1',	'2018-09-25 00:38:39.000',	'2018-09-25 01:20:13.000')
Insert into #Orderz ([code],[StartTime],[FinishTime]) VALUES ('Code1',	'2018-09-25 00:40:52.000',	'2018-09-25 01:22:19.000')
Insert into #Orderz ([code],[StartTime],[FinishTime]) VALUES ('Code1',	'2018-09-25 00:47:56.000',	'2018-09-25 01:36:55.000')
Insert into #Orderz ([code],[StartTime],[FinishTime]) VALUES ('Code1',	'2018-09-25 01:01:14.000',	'2018-09-25 01:41:46.000')
Insert into #Orderz ([code],[StartTime],[FinishTime]) VALUES ('Code1',	'2018-09-24 21:15:30.000',	'2018-09-25 01:46:50.000')
Insert into #Orderz ([code],[StartTime],[FinishTime]) VALUES ('Code1',	'2018-09-25 01:01:14.000',	'2018-09-25 01:46:50.000')
Insert into #Orderz ([code],[StartTime],[FinishTime]) VALUES ('Code1',	'2018-09-25 01:01:27.000',	'2018-09-25 02:00:29.000')
Insert into #Orderz ([code],[StartTime],[FinishTime]) VALUES ('Code1',	'2018-09-24 20:49:54.000',	'2018-09-25 02:00:31.000')
Insert into #Orderz ([code],[StartTime],[FinishTime]) VALUES ('Code1',	'2018-09-25 01:01:28.000',	'2018-09-25 02:04:41.000')
Insert into #Orderz ([code],[StartTime],[FinishTime]) VALUES ('Code1',	'2018-09-25 01:01:28.000',	'2018-09-25 05:58:40.000')
Insert into #Orderz ([code],[StartTime],[FinishTime]) VALUES ('Code1',	'2018-09-24 08:15:00.000',	'2018-09-25 09:23:14.000')
go

while 1=1
begin
	update o1
	set o1.StartTime = case when o1.StartTime > o2.StartTime then o2.StartTime else o1.StartTime end,
		o1.FinishTime = case when o1.FinishTime < o2.FinishTime then o2.FinishTime else o1.FinishTime end
	from #Orderz o1
		join #Orderz o2
			on o2.id <> o1.id
			and o2.StartTime <= o1.FinishTime
			and o2.FinishTime >= o1.StartTime
	if @@ROWCOUNT = 0
		break

	delete o1
	from #Orderz o1
	where exists(
			select * 
			from #Orderz o2
			where o2.id > o1.id
				and o2.StartTime = o1.StartTime
				and o2.FinishTime = o1.FinishTime
		)

end

select * from #Orderz
go
drop TABLE #Orderz
...
Рейтинг: 0 / 0
Учет работы единиц оборудования
    #39709261
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvgМожно сделать, например, в цикле (конечно, нужно добавить уникальный ИД, надеюсь, он же есть?):Да, забыл ещё по code связать, ну это уже детали
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Учет работы единиц оборудования
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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