2017-10-12 2 views
0

Die Datenbankstruktur ist nicht optimal aufgebaut, also geht es darum, das Beste aus dem aktuellen Zustand herauszuholen.Finde den zuletzt eingegebenen Datensatz - Postgresql

Ich möchte nur die letzte eingefügte Datensatz mit einem Zeichenfeld als id finden

CREATE TABLE find 
    (id varchar(8),date date);  
INSERT INTO find 
    (id,date) 
VALUES 
    ('X','2017-10-01'), 
    ('Y','2017-10-01'), 
    ('A','2017-10-01'); 

ich den letzten Datensatz finden möchte, die ‚A‘ ist

SELECT max(id) 
FROM  find 

den gemeinsame Verwendung von max bekommt ‚Y‘ als Antwort

Was ich suche ist eine magische versteckte Transaktions-ID wie

SELECT max(transaction_id) 
FROM  find 

Drei Fragen:

  1. Ist es möglich, letzten Datensatz 'A' ohne Zeitstempel zu finden?
  2. Kostet der Zeitstempel mehr als ein einfaches Datum?
  3. Andere Lösungen?

Fiddle: http://sqlfiddle.com/#!15/60b68/1

TIA,

+0

Es gibt kein magisches verstecktes Transaktionsfeld. Tatsächlich muss Postgres die "A" -Datei nicht einmal so erscheinen lassen, wie sie zuletzt erscheint, denn selbst wenn Sie 'ORDER BY date' verwenden würden, wäre es frei, diese drei Datensätze in beliebiger Reihenfolge zu platzieren. Wenn Sie eine Bestellung benötigen, die über das hinausgeht, was "Datum" bieten kann, wäre das Hinzufügen einer weiteren Spalte wahrscheinlich die beste langfristige Lösung. –

Antwort

2
  1. eine auto_increment Spalte hinzufügen und den MAX() davon. es wird korrektes Ergebnis zeigt

  2. Zeitstempel den Zeitabschnitt vergleichen auch und nützliche als einfaches Datum

  3. Sie ORDER BY your_date_time_field DESC tun können und 1 Datensatz auswählen, aber möglicherweise nicht korrektes Ergebnis bekommen.

Verwandte Themen