• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

mySQL DB-Abfrage

Bei mir funktionierts.

Code:
(1455, 137, 21, '2005-02-01', '0000-00-00'),
(1488, 41, 34, '2005-01-01', '0000-00-00'),
(1483, 130, 55, '2007-09-01', '2008-08-01'),
(1454, 83, 59, '2008-04-01', '0000-00-00'),
(1484, 81, 60, '2008-09-01', '0000-00-00'),
(1460, 17, 64, '2005-02-01', '0000-00-00'),
(1475, 143, 1424, '0000-00-00', '0000-00-00'),
(1480, 143, 1479, '0000-00-00', '0000-00-00'),
(1476, 143, 1596, '0000-00-00', '0000-00-00'),
(1478, 143, 1625, '0000-00-00', '0000-00-00'),
(1477, 143, 1631, '0000-00-00', '0000-00-00'),
(1479, 143, 1660, '0000-00-00', '0000-00-00'),
(1481, 143, 1671, '0000-00-00', '0000-00-00'),
(1482, 143, 1693, '0000-00-00', '0000-00-00');

Code:
INSERT INTO `lonely_hawk` (`id`, `id2`, `id3`, `date`, `other_date`) VALUES
(1455, 137, 21, '2005-02-01', '0000-00-00'),
(1488, 41, 34, '2005-01-01', '0000-00-00'),
(1489, 146, 34, '2003-07-01', '2004-12-01'),
(1490, 20, 34, '2001-12-01', '2003-06-01'),
(1483, 130, 55, '2007-09-01', '2008-08-01'),
(1471, 84, 55, '2000-01-01', '2004-09-01'),
(1468, 88, 55, '2004-10-01', '2006-02-01'),
(1470, 89, 55, '2006-09-01', '2007-08-01'),
(1472, 82, 56, '2006-03-01', '2007-07-01'),
(1474, 43, 56, '2008-07-01', '0000-00-00'),
(1458, 105, 56, '2004-06-01', '2006-02-01'),
(1452, 51, 58, '2008-05-01', '2008-09-01'),
(1473, 43, 58, '2008-10-01', '0000-00-00'),
(1454, 83, 59, '2008-04-01', '0000-00-00'),
(1484, 81, 60, '2008-09-01', '0000-00-00'),
(1487, 130, 60, '2005-10-01', '2007-07-01'),
(1486, 56, 60, '2002-08-01', '2005-09-01'),
(1485, 113, 60, '1999-01-01', '2002-07-01'),
(1460, 17, 64, '2005-02-01', '0000-00-00'),
(1475, 143, 1424, '0000-00-00', '0000-00-00'),
(1480, 143, 1479, '0000-00-00', '0000-00-00'),
(1476, 143, 1596, '0000-00-00', '0000-00-00'),
(1478, 143, 1625, '0000-00-00', '0000-00-00'),
(1477, 143, 1631, '0000-00-00', '0000-00-00'),
(1479, 143, 1660, '0000-00-00', '0000-00-00'),
(1481, 143, 1671, '0000-00-00', '0000-00-00'),
(1482, 143, 1693, '0000-00-00', '0000-00-00'),
(1492, 39, 2743, '2007-04-01', '2008-03-01'),
(1491, 63, 2743, '2008-03-01', '2008-08-01');

Code:
SELECT * FROM lonely_hawk
GROUP BY id3
HAVING date= MAX(date)

Okay, wohl zu früh gefreut. Ich erhalte auch nur 14 Datensätze, allerdings andere!! Diese bleiben allerdings immer die gleichen, egal wie oft ich die Anfrage wiederhole.
Also meinem Verständnis müßte meine Anfrage funktionieren. Ein Group nach dem Datum brauch ich da nicht.

@hesst:
Ist dein /-Taste kaputt? ;)
 
Zuletzt bearbeitet:
Bei mir funktionierts.
die reihenfolge dürfte bei seinem auszug aus der realen tabelle nicht der original einfügereihenfolge entsprechen. die query trift nur, wenn der 1. eingefügte datensatz dem max-datum entspricht.


Okay, wohl zu früh gefreut. Ich erhalte auch nur 14 Datensätze, allerdings andere!! Diese bleiben allerdings immer die gleichen, egal wie oft ich die Anfrage wiederhole.
ja

Also meinem Verständnis müßte meine Anfrage funktionieren. Ein Group nach dem Datum brauch ich da nicht.
doch, ohne ein group nach dem datum
findet er für id3=2743 folgendes:
1492, 39, 2743, '2007-04-01', '2008-03-01'
hier entspricht datum aber nicht dem max-datum aus dem nächsten datensatz. nur wenn das datum im 1. vorkommenden Datensatz das max-datum ist, wird mit dieser Query auch ein DS geliefert, da über die gruppierung nur über die id3 das datum aus dem 1. Datensatz genommen wird.

@hesst:
Ist dein /-Taste kaputt? ;)
nein, die ist nur langsam. In der Zwischenzeit sind die /-es auch angekommen. :D
 

keine ahnung, warum ich das übersehen hab?! :confused:
das scheint zu funktionieren. auch wenn ich die erklärung warum das andere nicht funktioniert noch nicht verstanden hab.

mein (offenbar naiver) gedanke war:
Code:
SELECT * FROM tab 
GROUP BY tab3_id // steht dafür, dass es die datensätze nach gleicher id zusammenfasst
HAVING datum = MAX(datum) // und den datensatz mit max (datum) jeweils davon aussucht

aber irgendwie ist das wohl nur die halbe wahrheit. ich werd die einträge nochmal aufmerksam durchlesen... vielen dank auf jeden fall! :)
 
mein (offenbar naiver) gedanke war:

Code:
SELECT * FROM tab 
GROUP BY tab3_id // steht dafür, dass es die datensätze nach gleicher id zusammenfasst
HAVING datum = MAX(datum) // und den datensatz mit max (datum) jeweils davon aussucht

das ist kein naiver gedanke, sondern die lösung. durch GROUP BY tab3_id werden die datensätze nach gleicher id zusammenfasst. jetzt gibt es aber (kann es geben) für eine tab3_id durchaus mehrere datumswerte. die query nimmt jetzt aber irgendein datum (das erste was es findet) in die ergebnistabelle. und jetzt kommt erst die HAVING-Klausel ins spiel (diese setzt auf die ergebnistabelle auf (die Aggregatfunktionen wirken auf die gruppen)). wenn jetzt das datum in der ergebnistabelle (das erste) nicht das max-datum ist, wird die Zeile aus der ergebnistabelle wieder entfernt (gefiltert).
 
Zurück
Oben