2013-02-01 8 views
7

Ho bisogno di ottenere una riga di informazioni con timestamp massimo in postgresql. Qui di seguito è una demo per questa domanda:Come ottenere la riga con timestamp massimo in postgres?

drop table Mytable cascade 
create table MyTable (usr char(1), event_dt timestamp without time zone); 
insert into mytable values ('A','01-JAN-2009 11:10:11'); 
insert into mytable values ('A','02-JAN-2009 11:10:22'); 
insert into mytable values ('B','02-JAN-2009 01:01:59'); 
insert into mytable values ('C', '31-DEC-2008 02:02:02'); 
insert into mytable values ('D', '31-DEC-2008 03:03:03'); 

Se faccio

select max(event_dt) from (
select usr,event_dt from mytable where usr= 'A') as foo 

Si tratta di una sorta di quello che mi serve, ma restituisce solo l'event_dt "2009-01-02 11:10:22 "

Dove voglio che anche l'usr sia event_dt da quella riga. Come lo faccio?

+2

Cosa vuoi fare se ci sono diverse righe con il 'max (event_dt)'? –

+1

Sono tornato alla versione precedente. Per favore non aggiungere un'altra domanda, iniziare una * nuova * per quello. Puoi trovare il tuo testo nella cronologia delle modifiche se ne hai bisogno. Inoltre: molte domande strettamente correlate. [Eccone uno] (http://stackoverflow.com/questions/3800551/sql-select-first-row-in-each-group-by-group). –

risposta

19

Vorrei semplicemente andare per ...

SELECT usr, event_dt FROM mytable ORDER BY event_dt DESC LIMIT 1 
+0

grazie a questo funziona! – Gob00st

+0

fantastico! out of box – charybr

+1

** Differenza di tempo **? Ho condotto un test di temporizzazione su circa un miliardo di righe di dati su entrambe le soluzioni OP e Najzero. C'è anche un guadagno di prestazioni del 25% nel fare la soluzione di Najzero. Quindi non solo sembra pulito, ma è molto più veloce (forse per ovvi motivi) – Torxed

Problemi correlati