Zeitwerte nach viertelstunden aggregieren

Polyeder

Benutzer
Beiträge
10
Hallo liebe Leute,

ich habe eine Liste mit datetime-Werten und will daraus die Uhrzeit so auslesen, dass ich die Minuten in Viertel unterteile um sie dann mit der Group-Funktion zu aggregieren.

Zuerst die Tabelle
Code:
CREATE TABLE [dbo].[tab_zeit](
   [nr] [int],
   [start] [datetime] NOT NULL)
 
insert into [dbo].[tab_zeit] ([nr], [start]) values ('1', '2020-03-31T12:10:10.000');
insert into [dbo].[tab_zeit] ([nr], [start]) values ('2', '2020-03-31T12:11:11.000');
insert into [dbo].[tab_zeit] ([nr], [start]) values ('3', '2020-03-31T12:13:13.000');
insert into [dbo].[tab_zeit] ([nr], [start]) values ('4', '2020-03-31T12:16:10.000');
insert into [dbo].[tab_zeit] ([nr], [start]) values ('5', '2020-03-31T12:17:11.000');
insert into [dbo].[tab_zeit] ([nr], [start]) values ('6', '2020-03-31T12:19:13.000');
insert into [dbo].[tab_zeit] ([nr], [start]) values ('7', '2020-03-31T13:11:10.000');
insert into [dbo].[tab_zeit] ([nr], [start]) values ('8', '2020-03-31T13:11:11.000');
insert into [dbo].[tab_zeit] ([nr], [start]) values ('9', '2020-03-31T13:13:13.000');
insert into [dbo].[tab_zeit] ([nr], [start]) values ('10', '2020-03-31T13:16:10.000');
insert into [dbo].[tab_zeit] ([nr], [start]) values ('11', '2020-03-31T13:17:11.000');
insert into [dbo].[tab_zeit] ([nr], [start]) values ('12', '2020-03-31T13:19:13.000');

--drop table [dbo].[tab_zeit]
select * from [dbo].[tab_zeit]

Das sollte dann das hier ergeben:

nrstart
1 2020-03-31 12:10:10.000
2 2020-03-31 12:11:11.000
3 2020-03-31 12:13:13.000
4 2020-03-31 12:16:10.000
5 2020-03-31 12:17:11.000
6 2020-03-31 12:19:13.000
7 2020-03-31 13:11:10.000
8 2020-03-31 13:11:11.000
9 2020-03-31 13:13:13.000
10 2020-03-31 13:16:10.000
11 2020-03-31 13:17:11.000
12 2020-03-31 13:19:13.000

Nun mein Problem:
Code:
select
[start], datepart(hour, [start]) as stunde, datepart(minute, [start]) as minuten,

Format([start],'hh') + (
case when(Format([start],'mm')<15) then ':00'
when(Format([start],'mm')<30) then ':15'
when(Format([start],'mm')<45) then ':30'
else ':45' end) as Zeit_von

FROM [dbo].[tab_zeit]

group by Format([start],'hh') + (case when (Format([start],'mm')<15) then ':00' when(Format([start],'mm')<30) then ':15' when (Format([start],'mm')<45) then ':30' else ':45' end), [start]

order by [start]

Nach der Format-Funktion werden bis 12:59 alles Werte richtig aggregiert, aber ab 13:00 aggregiert die Funktion im sog. 12-Std.-Modus, heißt also: 13:00 Uhr ist 01:00 Uhr.

upload_2020-7-13_12-7-37.png

Wie kann ich der Formatfunktion beibringen, dass die Werte im 24-Std.-Modus erstellt werden sollen?
 

Anhänge

  • upload_2020-7-13_11-51-10.png
    upload_2020-7-13_11-51-10.png
    4,1 KB · Aufrufe: 4
Zuletzt bearbeitet:
Werbung:
Hallo Leute,

Problem gelöst.

Obwohl ich vor der Threaderstellung wirklich ausgiebig im Netz gesucht hatte, habe ich die folgende Lösung gerade eben per Zufall, ganz "versteckt" in einer Beispielabfrage entdeckt.
Der Trick besteht in:
Code:
statt: Format([start], 'hh') + (
muss: Format([start], 'HH') + (


Uuuuuaaaaaaaaaaaaahhhhhhh!!
 
Werbung:
Du kannst auch statt bei den Minuten mit case() mit Divison und Runden arbeiten. Also z.B.:
Code:
SELECT datepart(minute,getdate())/15*15
wird dir die Minuten immer in 15er Schritte ausgeben weil es beim Teilen eines Integer immer abrundet.
 
Zurück
Oben