Polyeder
Benutzer
- Beiträge
- 10
Hallo zusammen,
ich habe eine Tabelle (tab_xy) mit folgenden Werten:
Hier der dazugehörige Create und Insert-Code (sind nur 2 Nummernläufe):
Nun will ich das für jede nr nur der kleinste start-Wert und der größte End-Wert in einer Zeile abgebildet wird.
Das Ergebnis sollte dann folgendermaßen aussehen:
Mein 1. Versuch ist eine Prozedur:
Ohne die Schleife erhalte ich genau einen Dataset (nämlich den ersten).
Mit Schleife erhalte ich tausende eigenständige identische Datasets.
Also ist dieser Weg wohl falsch.
Wahrscheinlich kann man das mit einer aggregierten Abfrage lösen.
Jedoch will mir das irgendwie nicht gelingen.
Beste Grüße
Polyeder
ich habe eine Tabelle (tab_xy) mit folgenden Werten:
Code:
nr start end
1 2020-03-31 08:02:15.000 2020-03-31 08:02:16.000
1 2020-03-31 08:02:27.000 2020-03-31 08:02:28.000
1 2020-03-31 08:02:29.000 2020-03-31 08:02:30.000
1 2020-03-31 08:02:31.000 2020-03-31 08:02:32.000
2 2020-03-31 08:15:04.000 2020-03-31 08:15:05.000
2 2020-03-31 08:15:06.000 2020-03-31 08:15:07.000
2 2020-03-31 08:15:16.000 2020-03-31 08:15:17.000
3 . .
3 . .
3 . .
. . .
. . .
. . .
Hier der dazugehörige Create und Insert-Code (sind nur 2 Nummernläufe):
Code:
CREATE TABLE [dbo].[xy](
[nr] [int],
[start] [datetime] NOT NULL,
[end] [datetime] NOT NULL)
insert into [dbo].[xy] ([nr], [start], [end]) values ('1', '2020-03-31T08:02:15.000', '2020-03-31T08:02:16.000');
insert into [dbo].[xy] ([nr], [start], [end]) values ('1', '2020-03-31T08:02:27.000', '2020-03-31T08:02:28.000');
insert into [dbo].[xy] ([nr], [start], [end]) values ('1', '2020-03-31T08:02:29.000', '2020-03-31T08:02:30.000');
insert into [dbo].[xy] ([nr], [start], [end]) values ('1', '2020-03-31T08:02:31.000', '2020-03-31T08:02:32.000');
insert into [dbo].[xy] ([nr], [start], [end]) values ('2', '2020-03-31T08:15:04.000', '2020-03-31T08:15:05.000');
insert into [dbo].[xy] ([nr], [start], [end]) values ('2', '2020-03-31T08:15:06.000', '2020-03-31T08:15:07.000');
insert into [dbo].[xy] ([nr], [start], [end]) values ('2', '2020-03-31T08:15:16.000', '2020-03-31T08:15:17.000');
select * from [dbo].[xy]
Nun will ich das für jede nr nur der kleinste start-Wert und der größte End-Wert in einer Zeile abgebildet wird.
Das Ergebnis sollte dann folgendermaßen aussehen:
Code:
nr start end
1 2020-03-31 08:02:15.000 2020-03-31 08:02:32.000
2 2020-03-31 08:15:04.000 2020-03-31 08:15:17.000
. . .
. . .
. . .
Mein 1. Versuch ist eine Prozedur:
Code:
DECLARE @id_1 integer,
@id_n integer,
@start datetime,
@end datetime
Set @id_1 = (select min(nr) from [tab_xy])
Set @id_n = (select max(nr) from [tab_xy])
SET @start = (select min([start]) from [tab_xy])
SET @end = (select max([end]) from [tab_xy])
while @id_1 < @id_n
begin
select @id_1, @start as Beginn, @end as Ende
set @id_1 = @id_1 + 1
end
GO
Ohne die Schleife erhalte ich genau einen Dataset (nämlich den ersten).
Mit Schleife erhalte ich tausende eigenständige identische Datasets.
Also ist dieser Weg wohl falsch.
Wahrscheinlich kann man das mit einer aggregierten Abfrage lösen.
Jedoch will mir das irgendwie nicht gelingen.
Beste Grüße
Polyeder
Zuletzt bearbeitet: