MySQL - InnerJoin und Sortieren

WhatEverWP

Grünschnabel
Guten Tag, bin hier gelandet, weil ich nicht mehr weiter weiß. ;)
Ich möchte gern Daten aus einer Tabelle heraus holen und die ist "doof" aufgebaut. In einer Tabelle mit Meta-Daten befinden sich immer ähnliche Werte, von denen ich gern 4 verschiedene finden würde und von diesen dann den jeweils letzten Eintrag, also den neuesten. Das einfache Wertpaar finde ich so:

PHP:
SELECT Datum, Eigenschaft1, Eigenschaft2, Merkmal1 
FROM kurs 
GROUP BY Merkmal1
Order by DatumZeit DESC
Limit 1

Wie kann ich noch 3 andere Werte in dieser Tabelle abfragen, sodass ich die 3 letzten Werte verschiedener Datensätze mit Merkmal1, Merkmal2 und Merkmal3 bekomme? Die Tabelle hat als eindeutiges Feld: kursid. Wäre das ein Inner Join auf dieses Feld? Ich meine, dass der Aufbau dieser Tabelle nicht in der 1. Normalform ist. Deshalb habe ich mir schon eine Hilfstabelle mit den Merkmal gemacht. Aber sicher bin ich mir nicht, ob das hilft.
 
Ich kann dir gerade überhaupt nicht folgen. Kannst du bitte mal eine Übersicht geben, welche Tabellen du verwenden möchtest und was du am Ende für ein Ergebnis bekommen möchtest?
 
Es ist nur eine Tabelle, in der alles drin steht. Es handelt sich um eine Kurstabelle, in der Kurse eingetragen werden. Es sind immer die gleichen Aktien, mit dem jeweiligen Wert, mit dem bestimmte Berechnungen vorgenommen werden. Also AktieA, AktieB, AktieC, etc. Jede Aktie kann also x-mal in der Tabelle vorkommen. Ich will nun den letzten Wert von einigen bestimmten Aktien haben. Also ist in meiner Spalte Name der Aktienname drin, in den nächsten Spalten sind dann Zahlwerte aus Berechnungsergebnissen drin. Die Datumsspalte gibt es zweimal: einmal als reines Tagesdatum, dann ein weiteres Mal als DatumZeitwert (Zeitstempel), weil manchmal mehrmals am Tag Daten eingetragen werden. Aber wie gesagt, ich will von mehreren Aktien den jeweils zuletzt erfassten Kurs haben. Ist das verständlicher?
 
SQL:
SELECT
    *
FROM
    kurs k
WHERE
    k.name IN ('Aktie1','Aktie2')
    AND k.id IN (
        SELECT
            MAX(k.id)
        FROM
            kurs k
        GROUP BY
           k.name
    )

Zur Erklärung: Über den Subselect SELECT MAX(k.id).... ermittelst du dir zu jeder möglichen Aktie in der Tabelle den letzten Eintrag. Das ganze ist jetzt ungetestet zusammengeschrieben.
 
Klasse! So funktioniert es nicht, aber das liegt wahrscheinlich an Dingen, die du nicht wissen kannst. Ich habe aber das mit dem IN () kombiniert mit meiner bestehenden Sortierung und es scheint richtig zu funktionieren:

SQL:
SELECT
   `Datum`,`akname`,`akurs`
FROM
    kurs k
WHERE
    k.aID IN ('1','2','3','4')
    Order by
       `DatumZeit` DESC
           Limit 4
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück