2016-08-29 4 views
0

Ich bin mir nicht sicher, wie Postgres Ansicht zu schreiben, die richtige Datensätze auswählen wird. Ich habe zwei Tabellen:SQL-Abfrage für Benutzerpräsenz

user_tab

user_id 
email 

und

absence_tab

absence_id 
user_id 
date_from 
date_to 

in absence_tab Datumsbereich darstellt, wenn der Benutzer nicht verfügbar ist (in Arbeit;)). Ich möchte alle Benutzer, die an einem bestimmten Datum verfügbar sind, auflisten, so dass sie in diesem Datum nicht in absence_tab angezeigt werden.

Danke für den Rat.

Antwort

2

Ausgabe von dieser Abfrage sind Benutzer, die in absence_tab in 2016-08-29 nicht existieren, was bedeutet, dass sie, wie Sie gesagt haben, an diesem Tag verfügbar sind.

select * 
from user_tab u 
where not exists (
    select 1 
    from absence_tab a 
    where u.user_id = a.user_id 
    and '2016-08-29' between date_from and date_to 
) 
+0

Nun, diese Abfrage wird funktionieren, aber ich möchte die Ansicht dafür erstellen. Also AFAIK, wenn ich als Abfrageargument (WHERE) ein Datum übergeben möchte, dann sollten auch die Spalten 'abwesenheit_von' und' abwesenheit_zu' gewählt werden;). Irgendeine Idee? – Inweo

+0

Sie könnten eine Set-Returning-Funktion verwenden, anstatt eine Ansicht zu erstellen. Eine Ansicht würde einen völlig anderen Code erfordern, und ich fürchte, das wäre nicht so effizient, da es mehr Datenverarbeitung erfordern würde. –

Verwandte Themen