Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

group by vs. distinct

Dieses Thema im Forum "SQLite" wurde erstellt von uppss, 18 Februar 2015.

  1. uppss

    uppss Benutzer

    Hallo Liebes Forumteam,

    ich habe eine sqlite Datenbank. Ich habe da auch mehrere identische Zeilen, die ich natürlich nur 1 Mal ausgeben möchte. Ich schreibe:

    SELECT * FROM t GROUP BY NAME(wo ich die doppelte Zeilen nur 1 mal ausgeben möchte)

    funktioniert super!!!

    Das Problem besteht darin, wenn ich meine Datensätze noch ein mal in die DB importiere, bekommen die entsprechend andere id(primary key i++ bei mir) == Zeilennummer (bei mir) und wenn ich meine SELECT Statement noch ein mal starte, sehe ich die Zeilen natürlich nur 1 Mal, aber mit einer anderen id Nummer. Dummerweise werden da die zu letzt importierte angezeigt(also die höchste Nummer). Ich möchte nur eine einzige Zeile aus der DB immer anzeigen.

    Was kann ich noch tun?

    Vielen Dank erstmal im Voraus
    Daniel
     
  2. akretschmer

    akretschmer Datenbank-Guru

    Ein "SELECT * FROM t GROUP BY NAME" ist gemäß der SQL-Spec falsch, alle Spalten im resultat müssen aggregiert oder gruppiert werden.

    In PG könntest Du mit distinct on() arbeiten.

    Dein Problem ist, denke ich ein anderes: dir fehlt ein PK (primary key). Das solltest Du fixen.
     
  3. uppss

    uppss Benutzer

    ich probiere, was Du mir gerade gesagt hast.

    ich habe schon mit
    SELECT DISTINCT id, column2,.....columnN FROM table_name WHERE [condition] probiert.

    distinct on() // on of ... hat mir gefehlt und es wurde bei mir immer nach id gesucht, da die alle nicht identisch waren, wurden alle Zeilen angezeigt.

    id habe ich bei mir als primary key mit i++ deklariert, sodass wenn ich neue Datensätze importiere, bekommen die immer neue id
     
  4. akretschmer

    akretschmer Datenbank-Guru

    Ja, und was genau willst Du jetzt?
     
  5. uppss

    uppss Benutzer

    Das was eine Behauptung ;-D, Du hast mir schon geholfen!!! Ich muss nur noch ausprobieren, ob das auch so geht, was ich mir vorgestellt habe.
     
  6. uppss

    uppss Benutzer

    Es geht nicht, ich muss unter Fehlerbeschreibung prüfen und identische Einträge ausfiltern
    [​IMG]
     

    Anhänge:

  7. Distrilec

    Distrilec Datenbank-Guru

    1. Solltest du das nicht schon beim Import abfangen?
    2. Könnte es dir nicht vollkommen egal sein ob du die Datensätze des ersten oder dritten Imports siehst?
    Denn wie du gesagt hast... Es sind die SELBEN Datensätze die du nochmal importierst
    3. Vllt. eine Spalte "entry_time" als Timestamp und dann nur den größten (kleinsten, oder welchen auch immer) abfragen

    Ich empfehle Punkt 1 ;)
     
    akretschmer gefällt das.
  8. akretschmer

    akretschmer Datenbank-Guru

    Ja, ich schrieb auch, daß dies unter PG ginge. Das ist eine Erweiterung vom SQL-Standard, zwar nett, aber nicht portabel.

    Wie sieht denn die Tabelle aus? Spaltendefinition, paar Beispiel-Daten, was soll rauskommen?
     
  9. uppss

    uppss Benutzer

    >1. Solltest du das nicht schon beim Import abfangen?
    sollte ich schon, finde aber recht komplex, da ich unter Zeitdruck stehe, möchte erst mal das Ergebnis haben.

    >2. Könnte es dir nicht vollkommen egal sein ob du die Datensätze des ersten oder dritten Imports siehst?
    Nein, sehr wichtig, das Programm macht Fehleranalyse, wenn jemand id== Fehlernummer x sieht und mit jemandem diese Nummer bespricht, der aber weiter Datensätze importiert hat und diese Fehler unter einer anderen Nummer sieht (x1) kann es nur zur Verwirrungen kommen.

    >3. Vllt. eine Spalte "entry_time" als Timestamp und dann nur den größten (kleinsten, oder welchen auch immer) abfragen
    gute Idee, ich muss schnell nachschlagen

    >Ich empfehle Punkt 1 ;)
    Ich gebe dir vollkommen recht!!!, vlt. später, wenn ich andere Funktionen fertig habe und noch Zeit habe :)

    generell sollte der User nur 1 Mal eine XML Liste importieren!!!
     
  10. Distrilec

    Distrilec Datenbank-Guru

    Punkt 1 ist recht komplex ? Erklärt in drei (mMn SEHR einfachen) Schritten :)

    Schritt 1: Erstelle eine temporäre Tabelle mit den gleichen Spaltendefinitionen
    Schritt 2: Importiere deine neuen Daten dahin
    Schritt 3:
    Führe das hier aus ->
    Code:
    Insert Into richtige_tabelle
    (
    Select * From temp_tabelle
    Minus
    Select * From richtige_tabelle
    )
    Natürlich die ID-Spalte (die erst nach Import bzw. während hinzugefügt wird) nicht mit einbeziehen ;)
     
  11. uppss

    uppss Benutzer

    >Wie sieht denn die Tabelle aus? Spaltendefinition, paar Beispiel-Daten, was soll rauskommen?

    [​IMG]

    Wenn ich
    SELECT DISTINCT id, Fehlebeschreibung, blub, blub, ... FROM trackingSystem
    schreibe, werden die Werte unter id miteinander verglichen und rest ausgegeben. Ich muss Strings unter Fehlerbeschreibung prüfen und identische ignorieren.
     

    Anhänge:

Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden