tag:forum.selfhtml.org,2005:/self MySQL: Ergebnisse einer Abfrage gruppieren -- Alternative? – SELFHTML-Forum 2012-01-04T12:51:55Z https://forum.selfhtml.org/self/2012/jan/4/mysql-ergebnisse-einer-abfrage-gruppieren-alternative/1536899#m1536899 MichaelR 2012-01-04T11:34:20Z 2012-01-04T11:34:20Z MySQL: Ergebnisse einer Abfrage gruppieren -- Alternative? <p>Hallo,</p> <p>es liegt eine Tabelle vor mit diversen Feldern, u. a. "Id" und "Timestamp".<br> Die einzelnen Datensätze können im Feld "Id" den selben Wert enthalten und gehören damit sachlich zusammen -- bilden praktisch eine 'Gruppe'. Bei der SELECT-Abfrage soll jedoch immer nur der neueste Datensatz aus einer solchen Gruppe ausgegeben werden.</p> <p>Mein SELECT Befehl enthält eine GROUP By-Klausel, in der nach der Id gruppiert wird. Das Problem ist allerdings, dass nicht der neueste Datensatz, sondern immer der erste (älteste) ausgegeben wird.</p> <p>Wie kann ich das dann änder? Eine ORDER By-Klausel bewirkt nichts. Hab ich schon versucht.</p> <p>Danke + Grüße<br> Michael</p> https://forum.selfhtml.org/self/2012/jan/4/mysql-ergebnisse-einer-abfrage-gruppieren-alternative/1536900#m1536900 Juve ben@benedikt-nienhaus.de 2012-01-04T12:03:57Z 2012-01-04T12:03:57Z MySQL: Ergebnisse einer Abfrage gruppieren -- Alternative? <p>Glück auf!</p> <p>Wie sieht denn dein Statement bisher aus?<br> Auf die Schnelle und ungetestet würde ich sowas vorschlagen:</p> <pre><code class="block language-sql"> <span class="token keyword">select</span> <span class="token function">max</span><span class="token punctuation">(</span><span class="token keyword">timestamp</span><span class="token punctuation">)</span><span class="token punctuation">,</span> id <span class="token keyword">from</span> <span class="token keyword">table</span> <span class="token keyword">group</span> <span class="token keyword">by</span> id </code></pre> <p>Das gibt dann zu jedern ID den höchsten Timestamp aus.</p> <p>Gruß,<br> der Juve</p> https://forum.selfhtml.org/self/2012/jan/4/mysql-ergebnisse-einer-abfrage-gruppieren-alternative/1536901#m1536901 MichaelR 2012-01-04T12:15:19Z 2012-01-04T12:15:19Z MySQL: Ergebnisse einer Abfrage gruppieren -- Alternative? <p>Hi,</p> <blockquote> <p>Glück auf!</p> </blockquote> <p>Leider net :(</p> <blockquote> <p>Wie sieht denn dein Statement bisher aus?</p> </blockquote> <p>Das Select gibt lediglich alle Felder aus.</p> <p>Das mit max() funktioniert lieder nicht, weder in der SELECT noch in der WHERE Klausel.</p> <p>Das Problem ist, dass es zu jeder ID mehrere Datensätze mit unterschiedlichen Zeitstempeln geben kann. Und von diesen soll jeweils nur der aktuellste genommen werden....</p> <p>Any ideas?</p> <p>Danke + Grüße<br> Michael</p> https://forum.selfhtml.org/self/2012/jan/4/mysql-ergebnisse-einer-abfrage-gruppieren-alternative/1536904#m1536904 Vinzenz Mai vinzenzmai@web.de 2012-01-04T12:34:48Z 2012-01-04T12:34:48Z MySQL: Ergebnisse einer Abfrage gruppieren -- Alternative? <p>Hallo,</p> <blockquote> <p>Das Problem ist, dass es zu jeder ID mehrere Datensätze mit unterschiedlichen Zeitstempeln geben kann. Und von diesen soll jeweils nur der aktuellste genommen werden....</p> </blockquote> <p>GROUP BY ist dafür *keine* Lösung :-)</p> <blockquote> <p>Any ideas?</p> </blockquote> <p>Dieses Standardproblem löst man mit korrelierten Unterabfragen, siehe z.B. </archiv/2006/7/t133015/#m861544></p> <p>Freundliche Grüße</p> <p>Vinzenz</p> https://forum.selfhtml.org/self/2012/jan/4/mysql-ergebnisse-einer-abfrage-gruppieren-alternative/1536902#m1536902 Juve ben@benedikt-nienhaus.de 2012-01-04T12:41:08Z 2012-01-04T12:41:08Z MySQL: Ergebnisse einer Abfrage gruppieren -- Alternative? <p>Glück auf!</p> <blockquote> <p>Any ideas?</p> </blockquote> <p>Klingt so, als wäre in deiner Tabelle id und timestamp der konkatenierte Primary Key. Mit meinem bereits genannten Statement bekommt du ja zu jeder ID den höchsten (=jüngsten) Timestamp. Dann musst du mit diesem Ergebnis letztlich nur nochmal auf deine Ursprungstabelle joinen und die beiden Felder als Join-Bedingung wählen. Ich bin nur leider nicht sicher, ob MySQL das kann, würde mich aber wundern, wenn nicht:</p> <pre><code class="block language-sql"> <span class="token keyword">select</span> t<span class="token punctuation">.</span><span class="token operator">*</span> <span class="token keyword">from</span> mytable t <span class="token keyword">join</span> <span class="token punctuation">(</span> <span class="token keyword">select</span> <span class="token function">max</span><span class="token punctuation">(</span>ts<span class="token punctuation">)</span> maxts<span class="token punctuation">,</span> id <span class="token keyword">from</span> mytable <span class="token keyword">group</span> <span class="token keyword">by</span> customer_id <span class="token punctuation">)</span> b <span class="token keyword">on</span> t<span class="token punctuation">.</span>ts<span class="token operator">=</span>b<span class="token punctuation">.</span>maxts <span class="token operator">and</span> t<span class="token punctuation">.</span>id<span class="token operator">=</span>b<span class="token punctuation">.</span>id </code></pre> <p>Gruß,<br> der Juve</p> https://forum.selfhtml.org/self/2012/jan/4/mysql-ergebnisse-einer-abfrage-gruppieren-alternative/1536903#m1536903 Juve ben@benedikt-nienhaus.de 2012-01-04T12:43:48Z 2012-01-04T12:43:48Z MySQL: Ergebnisse einer Abfrage gruppieren -- Alternative? <p>P.S.: Ja, ich weiß, "select *" ist böse soll hier nur zu Anschauungszwecken dienen.<br> P.P.S.: Der Code ist TransactSQL, mag sein, dass die MySQL-Syntax ggfs. abweicht.</p> https://forum.selfhtml.org/self/2012/jan/4/mysql-ergebnisse-einer-abfrage-gruppieren-alternative/1536905#m1536905 MichaelR 2012-01-04T12:51:55Z 2012-01-04T12:51:55Z MySQL: Ergebnisse einer Abfrage gruppieren -- Alternative? <p>Hi,</p> <blockquote> <p>Dieses Standardproblem löst man mit korrelierten Unterabfragen, siehe z.B. </archiv/2006/7/t133015/#m861544></p> </blockquote> <p>Super -- genau das hilft! Merci</p> <p>Grüße<br> Michael</p>