Laden...

Abfrage nach einem Datensatz, der in einer Reihe liegt (reines SQL Problem, mit Beispiel)

Erstellt von CoderboyPB vor 4 Jahren Letzter Beitrag vor 4 Jahren 1.138 Views
C
CoderboyPB Themenstarter:in
327 Beiträge seit 2008
vor 4 Jahren
Abfrage nach einem Datensatz, der in einer Reihe liegt (reines SQL Problem, mit Beispiel)

verwendetes Datenbanksystem: <MSQL>

Zu erst die Hintergrundgeschichte, als Motivation:
Kürzlich hatte das Datenunternehmen Opta bekannt gegeben, dass der SC Paderborn in der Bundesliga einen neuen Startrekord aufgestellt hat, da er als erstes Team an den ersten vier Spieltagen in den ersten 15 Minuten getroffen hat.

Nach meiner Verwunderung, was so alles statistisch erfasst wird, habe ich angefangen darüber nachzudenken, wie so eine Datenbank aussehen könnte.

Ich kam auch zu dem Schluss, dass jedes einzelne Tor ein Dateneintrag sein müsse mit diversen Fremdschlüsseln auf Torschützen, Spielminute, etc.

Mittlerweile konnte ich mir auch selbst beantworten, wie man die ersten vier Spieltage abfragt, man macht halt einfach eine Und Verknüpfung für die Spieltage 1 bis 4, denn drei war die bisherige Bestmarke.

Aber wie fragt man das allgemein ab, wenn man einfach nur die maximale Serie sucht, egal, ob die nun mit dem ersten Spiel oder einem späteren Spiel begonnen hat, denn hier liegt der Rekord beim BVB mit 6 Spielen aus 1960.

(Da Paderborn auch 2015 am letzten Spieltag in seiner bis dahin ersten und letzten Bundesliga Saison in der Anfangsviertelstunde getroffen hatte, könnten sie heute mit einem frühen Tor in Berlin sogar hier gleichziehen)

Aber um das ganze mal anschaubar zu machen:

Man nehme mal an, man habe eine Tabelle mit ganzen Zahlen, ein paar hängen zusammen, also folgen aufeinander, aber es gibt auch Lücken auf dem abgebildeten Zahlenstrahl.

Wie finde ich nun die längste zusammenhängende Sequenz, denn darauf reduziert sich das Ganze letztendlich?

16.806 Beiträge seit 2008
vor 4 Jahren

Ich kam auch zu dem Schluss, dass jedes einzelne Tor ein Dateneintrag sein müsse mit diversen Fremdschlüsseln auf Torschützen, Spielminute, etc.

Sowas wird i.d.R. nicht in relationalen, sondern in nicht-relationalen Datenbanken (NoSQL) erfasst. Darüber hinaus wird man hier entsprechend einen Data Lake besitzen, der verschiedene Aggegrationsstufen für Reports hat.
Die Sportec hat dazu auch eine Grafik: https://ecosystem.sportec-solutions.de/

Auf Rohdaten lässt man sowas nicht los; das wäre auch viel zu langsam.

3.511 Beiträge seit 2005
vor 4 Jahren

Moin,

relational kann man sowas auch abspeichern und an sich ohne weiteres abfragen. Auch hier hängt dementsprechend ein Analysis Cube oder ähnliches Gebilde hinten dran. Auf Rohdaten, wie Abt schon geschrieben hat, würde ich es aber auch nicht los lassen.

Ich habe solch eine "Fußball-Struktur" selber noch nie relational designt, würde aber auch daruf tippen, dass die Tore relational gesehen eine eigene Tabelle ist. Denn nur so, wie du ja selber auch schon festgestellt hast, können beliebig viele weitere Statistiken angehängt werden (Spieler, Minute, aus ruhenden Ball, usw...).

Man nehme mal an, man habe eine Tabelle mit ganzen Zahlen, ein paar hängen zusammen, also folgen aufeinander, aber es gibt auch Lücken auf dem abgebildeten Zahlenstrahl. Use SQL to Find Missing Numbers and Gaps in Sequence of Numbers like Identity Column. Ist zwar der umgekehrte Fall, lässt sich ja aber dann einfach abändern für längste bekannte Sequenz.

Gruß
Khalid

"Jedes Ding hat drei Seiten, eine positive, eine negative und eine komische." (Karl Valentin)

16.806 Beiträge seit 2008
vor 4 Jahren

würde aber auch daruf tippen, dass die Tore relational gesehen eine eigene Tabelle ist

Ich kenne das allgemein von Wettbewerben, dass "Aktionen" nicht-relational gespeichert werden; dahingehend entsprechend auch mein Hinweis.

C
CoderboyPB Themenstarter:in
327 Beiträge seit 2008
vor 4 Jahren

Danke für die Antworten, werde mir das alles mal in Ruhe intensiv anschauen.

PS: Paderborn hat es nicht geschafft saisonübergreifend im 6. Spiel in Folge in der ersten Viertelstunde zu treffen. - Dafür aber diesmal in den ersten 15 Minuten der zweiten Halbzeit ...