Konny: mysql: DISTINCT einer Spalte

Hallo,

gibt es für:

SELECT sp1,sp2 FROM table WHERE JaNeinSpalte = '1' LIMIT 1
UNION
SELECT sp1,sp2 FROM table WHERE JaNeinSpalte = '0' LIMIT 1

eine "pfiffigere" Lösung, um die letzten beiden Einträge mit jeweils JaNeinSpalte 0 sowie 1 zu erhalten?

Konny

  1. Hi,

    SELECT sp1,sp2 FROM table WHERE JaNeinSpalte = '1' LIMIT 1
    UNION
    SELECT sp1,sp2 FROM table WHERE JaNeinSpalte = '0' LIMIT 1
    

    eine "pfiffigere" Lösung, um die letzten beiden Einträge mit jeweils JaNeinSpalte 0 sowie 1 zu erhalten?

    wie kommst Du darauf, daß Du mit der genannten Query die letzten beiden Einträge bekommst?

    Tatsächlich bekommst Du damit jeweils irgendeinen Eintrag mit 1 und irgendeinen mit 0.

    Um den letzten zu bekommen, müßte eine Sortierung nach einer Spalte mit der Erstellungs- oder Änderungszeit der Einträge vorgenommen werden.

    cu,
    Andreas a/k/a MudGuard

    1. Oops, sorry. Ich hatte natürlich die Sortierung vergessen einzutragen.

      Aber meine Frage bleibt dann trozudem dieselbe.

      Gruß, Konny

  2. Hallo Konny,

    gibt es für:

    SELECT sp1,sp2 FROM table WHERE JaNeinSpalte = '1' LIMIT 1
    UNION
    SELECT sp1,sp2 FROM table WHERE JaNeinSpalte = '0' LIMIT 1
    

    eine "pfiffigere" Lösung,

    scheint dir das nur wegen DRY nicht pfiffig genug? Die Lesbarkeit ist jedenfalls perfekt.

    Bis demnächst
    Matthias

    --
    Rosen sind rot.
    1. Hi Mathhias,

      scheint dir das nur wegen DRY nicht pfiffig genug? Die Lesbarkeit ist jedenfalls perfekt.

      Was bedeutet DRY ?

      Gruß, Konny

      1. Hallo,

        Was bedeutet DRY ?

        Gegenteil von WET

        Gruß
        Kalk

        1. Danke. Konny

  3. Hallo Konny,

    zusammen mit dem schon erwähnten ORDER BY dürfte das die kompakteste Lösung sein.

    Mal angenommen, deine Sortierspalte wäre id und eindeutig, und du möchtest die Werte für die höchste ID haben. Dann könnte man sowas tun:

    SELECT sp1, sp2
    FROM table
    WHERE id IN (SELECT MAX(id) FROM table GROUP BY JaNeinSpalte)
    

    Aber ob das lesbarer, verständlicher oder performanter ist? Letzteres kann man testen, den Rest muss jeder selbst beurteilen. Wenn Du keine id hast, sondern ein Datum, und es zum höchsten Datum mehrere Einträge geben kann, dann müsste ich nochmal nachdenken ob man das ohne UNION und LIMIT hinbekommt. Vor allem stellt sich dann die Frage, welchen von den mehreren man will...

    Wenn der GROUP BY nicht auf eine Spalte mit 2 Werten ginge, sondern auf 20 Werte - oder schlimmer noch, auf eine variable Zahl von Werten -, dann ist mein Vorschlag wohl die einzige Möglichkeit. Aber wenn es genau 2 sind, ist deine Variante vermutlich am lesbarsten.

    Rolf

    --
    sumpsi - posui - clusi
    1. (SELECT MAX(id) FROM table GROUP BY JaNeinSpalte)
      

      Select MAX(id) ergibt genau einen Wert, was soll GROUP BY bewirken?

      1. Tach!

        (SELECT MAX(id) FROM table GROUP BY JaNeinSpalte)
        

        Select MAX(id) ergibt genau einen Wert, was soll GROUP BY bewirken?

        MAX() gibt genau einen Wert pro Gruppe. Daraus folgt: zwei Gruppen, zwei Ergebniszeilen.

        dedlfix.

        1. Hallo dedlfix,

          ich hab's extra vorher ausprobiert: Die Spalte, nach der gruppiert wird, muss nicht im SELECT auftauchen. Was für einen Einsatz in IN sehr praktisch ist...

          Rolf

          --
          sumpsi - posui - clusi