SQL Abfrage möglich?
Hallo liebe Comunity,
diesesmal habe ich wieder eine knifflige Aufgabe bekommen.
Ich weiss auch nicht ganz genau wie ich den Fall klar definieren kann und ob dieser überhaupt lösbar ist.
Nun ich versuche es mal damit:
Ich soll einen Datenbankvergleich der Datenfelder durchführen, dabei muss ich die höchsten Stückzahlen der letzten 20 Tage bestimmen.
An meinem Fallbeispiel: (Angehängtes Bild)
Anhand meines Beispiels sollen muss wird die Stückzahl 7112500 vom 20080208 und 5190900 vom 200817 herausgegeben werden.
Es sollen also nur die Spitzenwerte/Höchsten Stückzahlen/ Größsten Ausreisser der Datenbank ermttelt werden.
Was soll ausgegeben werden:
ID, Datum (an den der Höchstand war), Stückzahl des Höchststandes
Vielleicht noch eine kleine Ergänzung:
Es sollen nicht alle Ministückzahlenwert angegeben werden, sondern wirklich nur die Spitzenwerte.
Vielleicht lassen sich auch die Spitzenwerte anderst ermitteln (Prozentuale Höchststände?!), ich bin offen für Alternativvorschläge offen.
Ich hoffe, ich habe die Aufgabenbeschreibung einigermaßen gut erklären können.
Vielen Dank für eure Hilfe im Vorraus.
Grüße Supergecko
P.S.
Offenbar lässt sich das Image nicht einbinden, daher der Datenbankausschnitt per TXT
ID Datum Stück
2653820 20080130 2129700
2653821 20080131 3761500
2653822 20080201 2588700
2653823 20080204 1798600
2653824 20080205 3690000
2653825 20080206 6960000
2653826 20080207 7112500
2653827 20080208 3894700
2653828 20080211 2074500
2653829 20080212 3294700
2653830 20080213 1915000
2653831 20080214 1382100
2653832 20080215 1304200
2653833 20080219 1440300
2653834 20080220 2106400
2653835 20080221 1658200
2653836 20080222 1303200
2653837 20080225 1942100
2653838 20080226 1770500
2653839 20080227 1301700
2653840 20080228 1361200
2653841 20080229 1397400
2653842 20080303 2091000
2653843 20080304 2210200
2653844 20080305 4800400
2653845 20080306 3201500
2653846 20080307 3381600
2653847 20080310 3566100
2653848 20080311 3061700
2653849 20080312 1833000
2653850 20080313 3473600
2653851 20080314 2671900
2653852 20080317 5190900
2653853 20080318 2477500
2653854 20080319 2191200
2653855 20080320 2682100
2653856 20080324 1544500
2653857 20080325 1323800
2653858 20080326 1720900
2653859 20080327 1385400
2653860 20080328 1098300
2653861 20080331 1750800
2653862 20080401 1598400
diesesmal habe ich wieder eine knifflige Aufgabe bekommen.
Ich weiss auch nicht ganz genau wie ich den Fall klar definieren kann und ob dieser überhaupt lösbar ist.
Nun ich versuche es mal damit:
Ich soll einen Datenbankvergleich der Datenfelder durchführen, dabei muss ich die höchsten Stückzahlen der letzten 20 Tage bestimmen.
An meinem Fallbeispiel: (Angehängtes Bild)
Anhand meines Beispiels sollen muss wird die Stückzahl 7112500 vom 20080208 und 5190900 vom 200817 herausgegeben werden.
Es sollen also nur die Spitzenwerte/Höchsten Stückzahlen/ Größsten Ausreisser der Datenbank ermttelt werden.
Was soll ausgegeben werden:
ID, Datum (an den der Höchstand war), Stückzahl des Höchststandes
Vielleicht noch eine kleine Ergänzung:
Es sollen nicht alle Ministückzahlenwert angegeben werden, sondern wirklich nur die Spitzenwerte.
Vielleicht lassen sich auch die Spitzenwerte anderst ermitteln (Prozentuale Höchststände?!), ich bin offen für Alternativvorschläge offen.
Ich hoffe, ich habe die Aufgabenbeschreibung einigermaßen gut erklären können.
Vielen Dank für eure Hilfe im Vorraus.
Grüße Supergecko
P.S.
Offenbar lässt sich das Image nicht einbinden, daher der Datenbankausschnitt per TXT
ID Datum Stück
2653820 20080130 2129700
2653821 20080131 3761500
2653822 20080201 2588700
2653823 20080204 1798600
2653824 20080205 3690000
2653825 20080206 6960000
2653826 20080207 7112500
2653827 20080208 3894700
2653828 20080211 2074500
2653829 20080212 3294700
2653830 20080213 1915000
2653831 20080214 1382100
2653832 20080215 1304200
2653833 20080219 1440300
2653834 20080220 2106400
2653835 20080221 1658200
2653836 20080222 1303200
2653837 20080225 1942100
2653838 20080226 1770500
2653839 20080227 1301700
2653840 20080228 1361200
2653841 20080229 1397400
2653842 20080303 2091000
2653843 20080304 2210200
2653844 20080305 4800400
2653845 20080306 3201500
2653846 20080307 3381600
2653847 20080310 3566100
2653848 20080311 3061700
2653849 20080312 1833000
2653850 20080313 3473600
2653851 20080314 2671900
2653852 20080317 5190900
2653853 20080318 2477500
2653854 20080319 2191200
2653855 20080320 2682100
2653856 20080324 1544500
2653857 20080325 1323800
2653858 20080326 1720900
2653859 20080327 1385400
2653860 20080328 1098300
2653861 20080331 1750800
2653862 20080401 1598400
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 105734
Url: https://administrator.de/contentid/105734
Ausgedruckt am: 22.11.2024 um 20:11 Uhr
14 Kommentare
Neuester Kommentar
SELECT ID,date,quantitiy, avg(quantity) as mwert, stddev(quantity) as stdabw FROM tbl WHERE date >= ... AND quantity > (mwert + stdabw) ORDER BY date DESC
Das sollte alle Werte der letzten ... Tage (von deinem Beispiel ist nicht ersichtlich ob das Tage Feld ein DATE-Feld ist) raussuchen, deren Wert größer als der Mittelwert + die Standardabweichung ist (also statistisch ein tatsächlicher "Ausreißer").
Ist aber nur so ein Gedankenexperiment.
Grüße
Max
Nun, du kannst das ganze Spielchen auch noch etwas weiter treiben:
Diese Abfrage würde jetzt im Zeitraum ab dem 2008-03-11 alle herrausstechenden Werte suchen (2653852 und 2653850).
Als Diagramm in Excel würde das dann so aussehen:
http://img.i7m.de/show/2c2tr-3jq22-2tsns-iidwc.png
Du siehst hier, dass die Standardabweichung natürlich nur eine grobe Abschätzung ist.
Grüße
Max
SELECT id,datum,menge
FROM average
WHERE menge > ((SELECT AVG(menge) FROM average WHERE datum > 20080310) + (SELECT STDDEV(menge) FROM average WHERE datum > 20080310))
AND datum > 20080310
ORDER by menge DESC;
Diese Abfrage würde jetzt im Zeitraum ab dem 2008-03-11 alle herrausstechenden Werte suchen (2653852 und 2653850).
Als Diagramm in Excel würde das dann so aussehen:
http://img.i7m.de/show/2c2tr-3jq22-2tsns-iidwc.png
Du siehst hier, dass die Standardabweichung natürlich nur eine grobe Abschätzung ist.
Grüße
Max
Zeige mir alle ID´s, Datumzeiten und Stückzahlen an,
bei denen der Stückzahlenwert > ist 125%*(als der Durchschnitt der letzten 15 Tage + Standardabweichung der letzten 15 Tage)
bei denen der Stückzahlenwert > ist 125%*(als der Durchschnitt der letzten 15 Tage + Standardabweichung der letzten 15 Tage)
Das sähe dann so aus:
SELECT id,datum,menge
FROM table
WHERE menge > ((SELECT AVG(menge) FROM average WHERE datum > ...) + (SELECT STDDEV(menge) FROM average WHERE datum > ...))*1.25
AND datum > ...
ORDER by menge DESC;
Gehen wir es mal Zeile für Zeile durch:
SELECT id,datum,menge
Hole mir die Spalten ID,Datum,Menge
FROM average
Aus der Tabelle average
WHERE menge >=
für die Zeilen, wo die menge größer als
((SELECT AVG(menge) FROM average WHERE datum > ...) + (SELECT STDDEV(menge) FROM average WHERE datum > ...))*1.25
125% des Durchschnittswerts+Standardabweichung der letzten ... Tage ist
AND datum > ...
und die innerhalb der letzten ... Tage liegen
ORDER by menge DESC;
und sortiere sie nach der Menge absteigend.
Das Datum habe ich hier durch ... ersetzt, weil dein Datum kein DATE-Feld ist und man deshalb nicht die Datumsfunktionen benutzen kann mit denen man ziemlich leicht "Heute - 15 Tage" hätte rechnen können.
Übrigens sind Durchschnitt+Standardabweichung*1.25 schon ziemliche statistische Ausreißer.
Bereits Werte außerhalb der Standardabweichung sind idR schon Seltenheiten.
Der Bereich Durchschnitt ± Standardabweichung deckt, betrachtet man dein Beispiel bereits > 91% der Werte ab.
Mit 125% sind es 93%, mit 181% Toleranz werden 100% der Werte abgedeckt.
Grüße
Max
Moin Supergecko,
ich lese ja schon die ganze mit in diesem Thread, aber ich habe noch nicht ganz den Eindruck, dass wir Losungswilligen hier alles wissen, was wir wissen müssen.
Bitte nochmal, um das Problem vom Kopf auf die Füße zu bekommen:
Grüße
Biber
ich lese ja schon die ganze mit in diesem Thread, aber ich habe noch nicht ganz den Eindruck, dass wir Losungswilligen hier alles wissen, was wir wissen müssen.
Bitte nochmal, um das Problem vom Kopf auf die Füße zu bekommen:
- welche für die Abfrage relevanten Felder (Name+Datentyp) hat die Tabelle denn nu'??
- was ist der PK??
- An was hängt die Stückzahl? Die ID sagt ja nichts aus, außer dass in Deinen Beispieldaten immer genau ein Satz=eine Auto-ID pro Tag kommt. Es sind aber unterschiedliche "Typen", sagst Du ???
- Spricht irgendetwas dagegen, die Auswertung tatsächlich datumsbezogen zu machen?? "Die letzten 30 Auto-IDs entsprechen 30 Tagen"... das kann ich gar nicht glauben. dann kommen nie an einem Tag mehr als 1 Datensatz????
Grüße
Biber