group by vs. distinct

uppss

Benutzer
Beiträge
12
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
 
Werbung:
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

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.
 
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
 
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

Ja, und was genau willst Du jetzt?
 
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.
 
Es geht nicht, ich muss unter Fehlerbeschreibung prüfen und identische Einträge ausfiltern
db_statement-png.521
 

Anhänge

  • db_statement.PNG
    db_statement.PNG
    25 KB · Aufrufe: 16
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 ;)
 
>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!!!
 
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 ;)
 
Werbung:
>Wie sieht denn die Tabelle aus? Spaltendefinition, paar Beispiel-Daten, was soll rauskommen?

db_statement1-png.522


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

  • db_statement1.PNG
    db_statement1.PNG
    22,6 KB · Aufrufe: 11
Zurück
Oben