2017-08-23 3 views
1

Ich arbeite in Python mit einer SQLite3-Datenbank, und ich brauche alle Daten von einem Datum, aber ich brauche nur die letzte Zeile von jedem Benutzer. Lassen Sie mich erklären mir: Meine aktuellen Code ist dies:Python sqlite3 select ohne Feld zu wiederholen

conn = sqlite3.connect('database.db') 
c = conn.cursor() 

t = (user, pastTS) 
resultPoints = c.execute("SELECT * FROM table WHERE user != ? AND timestamp >= ?", t) 
conn.close() 

Das Problem dabei ist, dass es mir mehrere Einträge/Zeilen aus dem gleichen Benutzer zurückgibt, wenn ich nur die letzte wollen. Gibt es einen einfachen Weg dies zu erreichen, oder sollte ich den Cursor ana- lyieren, um die sich wiederholenden Felder zu entfernen?

Antwort

1

Wenn ich Ihr Problem richtig verstanden hat, können Sie Gruppe durch den Benutzer und erhalten den maximalen Zeitmarkenwert pro Benutzer, dann kommen Sie mit den table und gibt die Ergebnisse:

c.execute(""" 
    SELECT * 
    FROM (
      SELECT user, MAX(timestamp) as MaxTime 
      FROM table 
      GROUP BY user 
    ) t2 
    INNER JOIN table t1 
    ON t1.user != ? and t1.user = t2.user AND t1.timestamp = t2.MaxTime 
""", t) 

result = c.fetchall() 
print(result) 
+0

aber das gibt mir nur ein Ergebnis, wäre es nicht? Ich brauche ein Ergebnis von jedem Benutzer. Die Datenbank kann so aussehen, zum Beispiel: Gotcha, lesen Sie bitte die aktualisierte Abfrage User1 4419 User2 4114 User2 4112 User3 4109 Und ich brauche die letzte Zeile eines jeden Benutzers – Javierd98

+1

@ Javierd98 zu bekommen. – alecxe

+0

Danke! Das war genau das, was ich brauchte !! – Javierd98

1

Um eine Ausgabezeile für jeden zu bekommen Benutzer, Gruppierung verwenden. Um auszuwählen, welche aus jeder Gruppe Zeile zurückzukehren, use MAX():

c.execute("""SELECT user, 
        [other fields], 
        MAX(timestamp) AS timestamp 
      FROM MyTable 
      WHERE user != ? 
       AND timestamp >= ? 
      GROUP BY user 
      """, (user, pastTS))