1. Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm
    Information ausblenden

Datenbank Ergebnis vergleich gleicher Datensätze

Dieses Thema im Forum "MySQL und MariaDB" wurde erstellt von Matayus, 10 Oktober 2019.

  1. Matayus

    Matayus Benutzer

    Moin moin in die Runde,

    ich habe mal wieder ein Anliegen, da ich leider nicht weiter komme und schon einiges ausprobiert habe. Aber irgendwie komme ich nie zu meinem gewünschten Ergebnis.

    Ich sammele Daten per API auf meinem Datenbankserver. Nun möchte ich gerne Auswertungen darüber machen bezüglich der Preise.

    ZU den Fakten: Die gesammelten Daten trudeln alle XX Minuten in die Datenbank und werden mit einem Datensatz markiert. Jeder neuer Eintrag bekommt +1. Nun möchte ich genau den neuesten Datensatz miteinander vergleichen und entsprechend ausgeben.

    Das ganze sieht in etwa so aus:
    upload_2019-10-10_8-50-12.png


    Die spalten in gelb sind die neuesten (letzten) Datensätze. "Also Dataset 5".
    Die anderen Farben dienen nur zum Verständnis !!

    Ich möchte gerne 2 Sachen abfragen innerhalb dieser Datensätze:
    1. Ich benötige vom letzten Datensatz einmal den höchsten BID und den niedrigsten ASK Price.
    In diesem Fälle wäre das: Rakuten Bid 11,50 und Amazon Ask 13,00

    2. Ich benötige vom Last_Price den spread unterschied zwischen dem höchsten Last_Price und dem niedrigsten Last_price. In diesem Falle wäre das:
    Amazon mit 12 und Rakuten mit 12,50 und einem spread von 4,16 %

    Habe selber schon seit 1 Woche herum gedoktert und auch mit dem over Befehl experimentiert. Aber irgendwie komme ich nie zu meinem gewünschten Ergebnis. Hoffe jemand kann mir diesbezüglich helfen.

    Besten Dank, Mata
     
  2. akretschmer

    akretschmer Datenbank-Guru

    Ob ich die zweite Frage richtig verstanden habe weiß ich nicht ...

    Code:
    test=*# select * from matayus ;
     markt | bid  | ask  | last | dataset
    -------+------+------+------+---------
     a     |   10 |   12 |   11 |       1
     e     | 10.2 | 12.2 | 11.2 |       1
     r     | 10.5 | 12.5 | 11.5 |       1
     a     | 10.5 | 12.5 | 11.5 |       2
     e     | 10.7 | 12.7 | 11.7 |       2
     r     |   11 |   13 |   12 |       2
     a     | 10.5 | 12.5 | 11.5 |       3
     e     | 10.7 | 12.7 | 11.7 |       3
     r     |   11 |   13 |   12 |       3
     a     | 10.5 | 12.5 | 11.5 |       4
     e     | 10.7 | 12.7 | 11.7 |       4
     r     |   11 |   13 |   12 |       4
     a     |   11 |   13 |   12 |       5
     e     | 11.2 | 13.2 | 12.2 |       5
     r     | 11.5 | 13.5 | 12.5 |       5
    (15 rows)
    
    test=*# with dataset as (select max(dataset) from matayus ), vals as (select * from matayus,dataset where dataset = dataset.max)  (select markt, 'bid max' as price, bid from vals order by bid desc limit 1) union all (select markt, 'ask min', ask from vals order by ask asc limit 1);
     markt |  price  | bid  
    -------+---------+------
     r     | bid max | 11.5
     a     | ask min |   13
    (2 rows)
    
    test=*# with x as (select distinct markt, min(last) over (partition by markt), max(last) over (partition by markt) from matayus) select * from x order by markt;
     markt | min  | max  
    -------+------+------
     a     |   11 |   12
     e     | 11.2 | 12.2
     r     | 11.5 | 12.5
    (3 rows)
    
    
     
  3. Matayus

    Matayus Benutzer

    Hamma wie schnell Du wieder bist Herr Kretschmer... was wäre ich bloß ohne Dich.
    Formel 1 ist genau so wie ich es haben möchte. Frage zur ersten Formel: Wo in der Formel hast Du die Abkürzungen für die Märkte hinterlegt ?
    Oder hattest Du es manuell zur Übersicht eingefügt ? Weil Du fragst ja eigentlich Markt ab.

    Die 2. Formel hab ich mich wohl nicht gut genug ausgedrückt.
    Der höchste Last_price soll im Vergleich zum niedrigsten Last_Preis von Dataset 5 überprüft werden.
    In meinem Beispiel wäre das Amazon 12,00 und Rakuten 12,50. Ebay soll gar nicht angezeigt sondern nur der höchste und der niedrigste Wert.
    Und falls es dazu klappt, den Spread zwischen den höchsten und niedrigsten Last_price von "Dataset5". In diesem Falle "((12,5/12)-1)*100" quasi.


    Kommst Du zufällig aus Raum Bremen ?? Würd Dich gern mal zum Bierchen als Dank einladen :)
     
  4. castorp

    castorp Datenbank-Guru

    Du könntest akretschmer auch eine Freude machen, wenn Du einen Upgrade von MySQL nach Postgres machst :rolleyes:
    (SCNR)
     
    akretschmer gefällt das.
  5. akretschmer

    akretschmer Datenbank-Guru

    Abkürzung für Märkte? Ich hab einfach, faul wie ich bin, a,e und r genommen, das sind die jeweiligen Anfangsbuchstaben, in klein ;-)

    Code:
    test=*# with dataset as (select max(dataset) from matayus ), vals as (select * from matayus,dataset where dataset = dataset.max) select max(last), min(last),((max(last)/min(last))-1)*100 as spread from vals;
     max  | min |         spread         
    ------+-----+------------------------
     12.5 |  12 | 4.16666666666666666700
    (1 row)
    
    Woher ich komme steht zufällig in meinem Profil ;-)
     
  6. Matayus

    Matayus Benutzer

    Damit er nicht so alleine ist mit der Hilfe ?? :p
    Bin leider nur etwas fit in VB Script und lerne grade C im Studium :)

    Perfekt akretschmer. Formel 2 passt genau so zu 100% !!

    Dresden ist leider doch ne Strecke…. sollte es Dich mal nach Bremen verschlagen kannst Dich liebend gerne bei mir melden :)
    Mega vielen Dank mal wieder.
     
  7. akretschmer

    akretschmer Datenbank-Guru

    ich kann Dir gerne meine Kontonummer geben, für ein paar Bierchen ;-)
     
  8. Matayus

    Matayus Benutzer

    Moin Andreas,

    endlich steht meine Datenbank und diese wird nun auch mit Daten gefüttert.
    Habe die Formeln ausprobiert und habe einen Fehler. Hoffe Du kannst mir da nochmal unter die Arme greifen :)

    Beispiel 2. Formel von Dir:

    upload_2019-10-16_11-31-16.png
    Mysql meckert mir den Komma an aber ich weiss nicht warum.
    Hier die Fehlermeldung vom Compiler:
    Error Code: 1064. You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ' vals as (select * from ticker,dataset where dataset = dataset.max) select max' at line 1

    Beste Grüße, Mata
     
  9. akretschmer

    akretschmer Datenbank-Guru

    da fehlt was am Anfang, die Abfrage fängt mit WITH an. Ja, das gehört dazu. Ich bin mir aber nicht sicher, ob MySQL das überhaupt kann.

    Grüße aus Mailand.
     
  10. Matayus

    Matayus Benutzer

    alles klar. Ich schau dann erstmal selber :)

    Dann mal schöne Grüße nach Mailand :)
     
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden