Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Учет работы единиц оборудования / 13 сообщений из 13, страница 1 из 1
26.09.2018, 10:41
    #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
26.09.2018, 10:47
    #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
26.09.2018, 10:49
    #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
26.09.2018, 11:17
    #39708293
Const123
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Учет работы единиц оборудования
TaPaK,
Вроде все понятно из результирующей выборки:
надо объединить пересекающиеся интервалы и выделить отдельно не пересекающиеся.
Оффтоп: а не факт, что сами не столкнетесь с такой же ситуацией, когда требуется срочная помощь, а вам просто посоветуют как типа правильно жить. Жизнь - штука сложная, за всякое праздно сказанное слово рано или поздно придется ответить. Не стоит жить по принципу: упавшего - добей.
...
Рейтинг: 0 / 0
26.09.2018, 11:20
    #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
26.09.2018, 11:37
    #39708308
982183
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Учет работы единиц оборудования
Только вчера Akina ответ дал
21684663
...
Рейтинг: 0 / 0
26.09.2018, 11:45
    #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
26.09.2018, 16:32
    #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
26.09.2018, 16:37
    #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
27.09.2018, 02:10
    #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
27.09.2018, 02:18
    #39708955
982183
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Учет работы единиц оборудования
Так он описал
Const123надо объединить пересекающиеся интервалы и выделить отдельно не пересекающиеся.

Только тестовые данные дал неверные.
...
Рейтинг: 0 / 0
27.09.2018, 11:38
    #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
27.09.2018, 13:33
    #39709261
alexeyvg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Учет работы единиц оборудования
alexeyvgМожно сделать, например, в цикле (конечно, нужно добавить уникальный ИД, надеюсь, он же есть?):Да, забыл ещё по code связать, ну это уже детали
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Учет работы единиц оборудования / 13 сообщений из 13, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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