PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Recupera le righe in base alla condizione

Ci sono due ragioni per cui row y non viene restituito è dovuto alla condizione:

  • b.start > a.start significa che una riga non si unirà mai a se stessa
  • Il GROUP BY restituirà un solo record per APP_nm value, ma tutte le righe hanno lo stesso valore.

Tuttavia, nella query sono presenti ulteriori errori logici che non verranno gestiti correttamente. Ad esempio, come fa a sapere quando inizia una "nuova" sessione?

La logica che cerchi può essere raggiunta nel normale PostgreSQL con l'aiuto di un DISTINCT ON funzione, che mostra una riga per valore di input in una colonna specifica. Tuttavia, DISTINCT ON non è supportato da Redshift.

Alcune potenziali soluzioni alternative:DISTINCT ON come funzionalità per Redshift

L'output che cerchi sarebbe banale usando un linguaggio di programmazione (che può scorrere i risultati e memorizzare variabili) ma è difficile da applicare a una query SQL (che è progettata per operare su righe di risultati). Consiglierei di estrarre i dati ed eseguirli tramite un semplice script (ad esempio in Python) che potrebbe quindi restituire le combinazioni di inizio e fine che cerchi.

Questo è un eccellente caso d'uso per una funzione Hadoop Streaming , che ho implementato con successo in passato. Prenderebbe i record come input, quindi "ricorderebbe" l'ora di inizio e produrrebbe un record solo quando la logica finale desiderata è stata soddisfatta.