SQL Tabelle nach mehreren Werten filtern

thunder_slf

Newbie
Registriert
Apr. 2017
Beiträge
2
Hallo,

ich habe ein Select der mir mehrere Werte einer Tabelle zurück liefert. Nun möchte ich eine 2. Tabelle nach diesen Werten filtern, hierbei soll nur der jeweils aktuellste Wert des Eintrags angezeigt werden. Leider bin ich grad am Verzweifeln daran.

MySQL + PHP

Danke Grüße
 
Wie filterst du den aktuellsten Wert. Per Datum nehme ich an
 
die erste tablle filter ich nach kundennnummer. da kommen dann ids von hardware zurück. in der anderen tabelle stehen die hardware ids mit weiteren werten die 2. will ich nach den aktuellsten werten der id's filtern
 
Mit temporärer Tabelle

select tab1.id, max(date) as MaxDate
into #tmp
from tab1, tab2
where tab1.id = tab2.id
and tab1.typ = 'Games'
group by tab1.id

select *
from tab2, #tmp
where #tmp.id = tab2.id
and #tmp.Maxdate = tab2.date
Ergänzung ()

Kann kein PHP deshalb weiss ich nicht ob er es an nimmt. SQL selbst sollte es am einfachsten mit einer temporärer Tabelle gehen
 
Am einfachsten wäre wahrscheinlich ein Subselect:

SELECT * FROM tabelle2
WHERE hardware_id IN (dein Select hier)
ORDER BY datum DESC
LIMIT 1

Edit @Renegade334: Ich denke noch nicht mal, dass ein Join sauberer wäre. Anfängern (mir seinerzeit auch) wird / wurde halt beigebracht, Joins zu bevorzugen, weil sie schneller seien als Subselects. Das ist meistens auch so, aber in vielen Fällen (gerade wenn die Datenmengen nicht besonders groß sind) ist der Unterschied vernachlässigbar. Ich denke, für jemanden, der sich noch nicht an SQL "gewöhnt" hat, ist ein Subselect wohl leichter verständlich. Ansonsten würde ich natürlich auch etwas schreiben wie

SELECT t2.* FROM tabelle2 t2
JOIN tabelle1 t1 USING (hardware_id) // bzw. mit ON t1.hardware_id = t2.bla_id falls nicht gleich benannt
WHERE irgendwas_mit_t1
ORDER BY t2.datum DESC
LIMIT 1
 
Zuletzt bearbeitet:
Die aktuellsten Werte ohne einen Timestamp zu bekommen könnte schwer werden. Die Reihenfolge ist ohne Sortierung nicht unbedingt festgelegt.
Die Möglichkeit die Tabellen per Join zu verknüpfen wurde ja schon genannt. Alternativ kann man auch ein verschachteltes Select machen (Join ist aber sauberer).

z.B.
SELECT TOP 1 * FROM [Tabelle2] WHERE [hardwareID] IN (SELECT [hardwareID] FROM [Tabelle1] WHERE [kundennummer] LIKE 'wasauchimmer%') ORDER BY [timestamp] DESC
 
mit "where in" und "top1" mit einer temporären Tabelle die nach Datum sortiert ist.
 
kroto schrieb:
mit "where in" und "top1" mit einer temporären Tabelle die nach Datum sortiert ist.

MySQL kennt kein TOP, da heißt es LIMIT und steht (meistens) am Ende der Query.
 
Bitte löschen!

Danke!
 
Zuletzt bearbeitet von einem Moderator:
Ich bin nicht sicher dass der Top1 oder Limit 1 korrekt ist.
So wie ich die Frage verstehen will er für jeden Artikel aus T2 der von einem Kunden aus T1 gekauft wurde immer nur die aktuellste version. Ich habs verstanden dass jeder artikel mehrere versionen hat und dass er nur jeweils den aktuellsten pro Artikel will
 
Zurück
Oben