Benutzer mit den meisten Antworten
Join mit Range

Frage
-
Hallo Experten,
habe wieder ein Spezialabfrage zu erstellen. Ich soll das morgen präsentieren, vielleicht hat jemand eine Lösung für mich.
Es geht um Telefongespräche die ich in der nachfolgenden, vereinfacht dargestellten Gesprächstabelle gespeichert habe.
Von DateTime Bis DateTime
Die nachfolgende Abfrage liefert mir die Anzahl der Gespräche pro Monat
var anzgespr = _bucs .GroupBy(b => new { Jahr = b.Von.Year, Monat = b.Von.Month }) .Select(b => new { b.Key.Jahr, b.Key.Monat, Anzahl = b.Count() }) .ToList();
Diese Abfrage müsste ich jetzt um die Gesprächsdauer erweitern. Und zwar abhängig von folgender Tabelle
1 13 Bis 30 Sekunden 001 SEKUNDEN 0 30 2 13 Bis 2 Minuten 002 SEKUNDEN 30 120 3 13 Bis 10 Minuten 003 SEKUNDEN 120 600 4 13 Bis 1 Stunde 004 SEKUNDEN 600 3600 5 13 über 1 Stunde 005 SEKUNDEN 3600 9999999999999
Liegt die Differenz (Tabelle Gespräche 'Bis' minus 'Von') in Sekunden innerhalb der Sekundenwerte (letze zwei Spalten der obigen Tabelle), so soll der entsprechende Wert aus Spalte 3 und 4 (oder auch nur eine der beiden Spalten) gruppiert werden und es sollen die Gespräche gezählt werden.
Das Ergebnis soll dann symbolisch so aussehen:
Jahr Monat Dauer Anzahl der Gespräche 2014 01 Bis 30 Sekunden 4 2014 01 Bis 2 Minuten 25 2014 01 Bis 5 Minuten 10 2014 02 Bis 30 Sekunden 9 usw.
Hat jemand eine Idee wie man das realisieren kann?
Vielen Dank für Eure Hilfe
Siegfried
- Bearbeitet Siegfried Reichmann Dienstag, 2. Dezember 2014 11:53
Antworten
-
Hallo,
ich verstehe glaube nicht so ganz, wie du was zusammen zählen willst.
Ich gehe mal davon aus, dass du die Auswertung im Pro Monat haben willst. Für jeden Monat willst du dann heraus bekommen, wie viele Gespräche <30s, 20s<x<2min, 2min<x<10min usw. lang liefen. Das könnte in etwa mit folgendem Code funktionieren:var anzgespr = _bucs .GroupBy(b => new { Jahr = b.Von.Year, Monat = b.Von.Month })//Gruppierung nach Jahr und Monat .Select(x => x.GroupBy(y => Category((y.Bis - y.Von).TotalSeconds))//Jeden Monat nach Gesprächslänge gruppieren .Select(y => new { Jahr = x.Key.Jahr, Monat = x.Key.Monat, Dauer = y.Key, Anzahl = y.Count() })//Jeweils nur die Anzahl mit Monat und Jahr zurück geben ) .SelectMany(x => x)//Alle Unterlisten zu einer machen .ToList();
Die Category-Methode erzeugt einen Key aus der Gesprächslänge:static int Category(double secs) { if (secs < 30) return 0; if (secs < 2 * 60) return 1; if (secs < 10 * 60) return 2; if (secs < 60 * 60) return 3; return 4; }
Als Ergebnis erhältst du eine Liste mit den Eigenschaften Jahr und Monat sowie Dauer (Der Schlüssel der Category-Methode) und Anzahl der dazu passenden Gespräche.
Tom Lambert - C# MVP
Wozu Antworten markieren und für Beiträge abstimmen? Klicke hier.
Nützliche Links: .NET Quellcode | C# ↔ VB.NET Konverter | Account bestätigen (Verify Your Account)
Ich: Webseite | Code Beispiele | Facebook | Twitter | Snippets- Als Antwort markiert Siegfried Reichmann Dienstag, 2. Dezember 2014 20:43
Alle Antworten
-
Hallo,
ich verstehe glaube nicht so ganz, wie du was zusammen zählen willst.
Ich gehe mal davon aus, dass du die Auswertung im Pro Monat haben willst. Für jeden Monat willst du dann heraus bekommen, wie viele Gespräche <30s, 20s<x<2min, 2min<x<10min usw. lang liefen. Das könnte in etwa mit folgendem Code funktionieren:var anzgespr = _bucs .GroupBy(b => new { Jahr = b.Von.Year, Monat = b.Von.Month })//Gruppierung nach Jahr und Monat .Select(x => x.GroupBy(y => Category((y.Bis - y.Von).TotalSeconds))//Jeden Monat nach Gesprächslänge gruppieren .Select(y => new { Jahr = x.Key.Jahr, Monat = x.Key.Monat, Dauer = y.Key, Anzahl = y.Count() })//Jeweils nur die Anzahl mit Monat und Jahr zurück geben ) .SelectMany(x => x)//Alle Unterlisten zu einer machen .ToList();
Die Category-Methode erzeugt einen Key aus der Gesprächslänge:static int Category(double secs) { if (secs < 30) return 0; if (secs < 2 * 60) return 1; if (secs < 10 * 60) return 2; if (secs < 60 * 60) return 3; return 4; }
Als Ergebnis erhältst du eine Liste mit den Eigenschaften Jahr und Monat sowie Dauer (Der Schlüssel der Category-Methode) und Anzahl der dazu passenden Gespräche.
Tom Lambert - C# MVP
Wozu Antworten markieren und für Beiträge abstimmen? Klicke hier.
Nützliche Links: .NET Quellcode | C# ↔ VB.NET Konverter | Account bestätigen (Verify Your Account)
Ich: Webseite | Code Beispiele | Facebook | Twitter | Snippets- Als Antwort markiert Siegfried Reichmann Dienstag, 2. Dezember 2014 20:43