Mehrfachabfragen mit mehren Bedingungen

Thrawn

Neuer Benutzer
Beiträge
2
Hi zusammen,

ich habe momentan einen recht mühsehligen Auftrag, der eventuell etwas einfacher zu handhaben wäre.
Ich habe unter anderem folgende Spalten:

dtStart -> DateTime -> Zeitstempel mit Datum und Uhrzeit des Eintrags
nDuration -> Decimal -> Zeitdauer in Sekunden
nID -> Int -> Kunden-ID

Ich möchte Select-Abfragen tätigen, die in Zeiträumen die Anzahl und Dauer der Anrufe zusammenfasst

Momentan sieht es noch so aus:


Code:
SELECT count(*) as Anzahl, sum(nDuration) as Dauer
FROM tabelle
WHERE dtStart BETWEEN 'JJJJMMTT SS:MM:SS:XXXX' AND 'JJJJMMTT SS:MM:SS:XXXX'
AND nID=XXXX


Da dort aber immer jeder Tag händisch eingetragen werden muss, dauert dies auf ein Jahr betrachtet furchtbar lange und ist stupide.

  • Gibt es eine Möglichkeit, die einzelnen Tage auf einen Zeitraum (Monat oder Jahr) komplett gleich ausgeben zu lassen?
  • Falls nein, gibt es einen Weg, die BETWEEN-Klausel auf Zeitstempel + 24h oder ähnlich einzugeben?
 
Werbung:

akretschmer

Datenbank-Guru
Beiträge
9.420
Momentan sieht es noch so aus:


Code:
SELECT count(*) as Anzahl, sum(nDuration) as Dauer
FROM tabelle
WHERE dtStart BETWEEN 'JJJJMMTT SS:MM:SS:XXXX' AND 'JJJJMMTT SS:MM:SS:XXXX'
AND nID=XXXX


Da dort aber immer jeder Tag händisch eingetragen werden muss, dauert dies auf ein Jahr betrachtet furchtbar lange und ist stupide.

  • Gibt es eine Möglichkeit, die einzelnen Tage auf einen Zeitraum (Monat oder Jahr) komplett gleich ausgeben zu lassen?
  • Falls nein, gibt es einen Weg, die BETWEEN-Klausel auf Zeitstempel + 24h oder ähnlich einzugeben?

In PG gibt es eine Funktion generate_Series(), mit dessen Hilfe könntest Du 'on-the-fly' eine Hilfstabelle erstellen:

Code:
test=*# select '2013-01-01'::date + s * '1day'::interval from generate_Series(0,10)s;
      ?column?
---------------------
 2013-01-01 00:00:00
 2013-01-02 00:00:00
 2013-01-03 00:00:00
 2013-01-04 00:00:00
 2013-01-05 00:00:00
 2013-01-06 00:00:00
 2013-01-07 00:00:00
 2013-01-08 00:00:00
 2013-01-09 00:00:00
 2013-01-10 00:00:00
 2013-01-11 00:00:00
(11 rows)

Vielleicht hat M$SQL ja was ähnliches im Angebot?


Andreas
 

ukulele

Datenbank-Guru
Beiträge
4.579
Du meinst in etwa so?:
Code:
SELECT    datepart(yyyy,dtStart) AS Jahr,
        datepart(mm,dtStart) AS Monat,
        datepart(dd,dtStart) AS Tag,
        count(*) AS Anzahl,
        sum(nDuration) AS Dauer
FROM    tabelle
WHERE    nID=XXXX
GROUP BY datepart(yyyy,dtStart),datepart(mm,dtStart),datepart(dd,dtStart)
 

Thrawn

Neuer Benutzer
Beiträge
2
Genial. Ukulele, du hast mir ca. 6 Stunden Arbeit erspart.

Group By gehört zu den Sachen, die ich bisher gemieden habe.
 

ukulele

Datenbank-Guru
Beiträge
4.579
Eine Funktion wie generate_series() ist mir unter MS SQL leider nicht bekannt. Daher werden auch Dinge wie 2-Tages Intervale ein bischen frickelig. Lösbar ist das schon nur eben nicht so komfortabel.
 
Werbung:
Oben