tag:forum.selfhtml.org,2005:/selfMySQL: Ergebnisse einer Abfrage gruppieren -- Alternative? – SELFHTML-Forum2012-01-04T12:51:55Zhttps://forum.selfhtml.org/self/2012/jan/4/mysql-ergebnisse-einer-abfrage-gruppieren-alternative/1536899#m1536899MichaelR2012-01-04T11:34:20Z2012-01-04T11:34:20ZMySQL: 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#m1536900Juveben@benedikt-nienhaus.de2012-01-04T12:03:57Z2012-01-04T12:03:57ZMySQL: 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#m1536901MichaelR2012-01-04T12:15:19Z2012-01-04T12:15:19ZMySQL: 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#m1536904Vinzenz Maivinzenzmai@web.de2012-01-04T12:34:48Z2012-01-04T12:34:48ZMySQL: 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#m1536902Juveben@benedikt-nienhaus.de2012-01-04T12:41:08Z2012-01-04T12:41:08ZMySQL: 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#m1536903Juveben@benedikt-nienhaus.de2012-01-04T12:43:48Z2012-01-04T12:43:48ZMySQL: 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#m1536905MichaelR2012-01-04T12:51:55Z2012-01-04T12:51:55ZMySQL: 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>