2016-11-07 1 views
0

Ich habe eine Tabelle wie diesewie letzten Wert eines Attributs in postgresql Pivot-Tabelle erhalten

id  u_id attr_key attr_value process_id  insert_time 
------|-------|----------|------------|--------------|-------------- 
    1  1  name   john   1    1  
    2  1  family  smith   1    2 
    3  2  job   clerk   2    3 
    4  1  name   sarah   3    4 
............. 

Ich habe zwei Dinge zu finden:

  1. Ich habe eine Ansicht von tablefunc erstellen (Kreuztabellen), um eine Gruppe von Daten für eine beliebige von U_ID zu holen. So ist es einfach
  2. Ich muss (letzten) letzten Wert eines beliebigen Schlüssels von einem U_ID (wie Hbase-Datenbank) zu finden, so habe ich keine gute Lösung

das ist, was ich

id  u_id attr_key attr_value 
------|-------|----------|------------ 
    4  1  name   sarah 
    2  1  family  smith 

Jede Idee oder eine Funktion benötigen? (das möglich, eine Spalte in meinem Datenmodell hinzufügen)

+0

Bitte ** [EDIT] ** Ihre Frage und fügen Sie die erwartete Ausgabe basierend auf Ihren Beispieldaten. Und du solltest nur eine Frage pro Frage stellen –

+0

ok ............. –

Antwort

0

Die effizienteste Lösung Probleme in Postgres zu verwenden ist distinct on():

Nachfolgend dass für ein einzelnes u_id

select distinct on (attr_key) id, u_id, attr_key, attr_value 
from the_table 
where u_id = 1 
order by attr_key, insert_time desc; 
abruft

Ein Index auf (u_id, attr_key, insert_time) sollte für die Leistung helfen

+0

danke Pferd, aber denkst du, es ist eine gute Lösung für über 50.000.000 Zeile –

+0

Es ist ziemlich effizient und sollte gut funktionieren, wenn richtig indiziert - vor allem, wenn Sie nach einer einzelnen 'u_id' fragen (vorausgesetzt, Sie meinen nicht 50 Millionen Zeilen ** pro Benutzer **). Sie müssen jedoch selbst, auf Ihren Daten und Ihrer Hardware testen. –

+0

Ja du hast recht, ich muss es versuchen, danke nochmal –

Verwandte Themen