Anwesenheits-Abfrage als Boolean

Simuletsplay

Benutzer
Beiträge
7
Hallo zusammen,

ich habe mal eine Frage bezüglich einer SQL-Abfrage für eine Anwesenheitsliste.

Folgende Daten sind gegeben:
ID, User-ID, Datum

Ist der User anwesend wird ein Eintrag mit dem heutigen Datum gemacht. Wenn nicht, dann passiert nichts.

In der Abfrage bisher frage ich alle Daten (auf Datum bezogen) ab, wann der User anwesend war.
Da ich aber jetzt die Einträge vergleichen möchte, habe ich folgende Idee gehabt:

Die Abfrage soll folgendes ausgeben:
Datum, Ja/Nein

Datum soll dabei immer nur das Datum sein, an denen auch andere User anwesend waren.

Beispiel-Daten:
2022-11-01 | 31
2022-11-01 | 35
2022-11-03 | 31

Die Ausgabe für User 35 sollte jetzt folgende sein:
2022-11-01 | JA
2022-11-03 | NEIN

Die Ausgabe für User 31 sollte jetzt folgnede sein:
2022-11-01 | JA
2022-11-03 | JA


Was da genau als Wert steht ist mir eigentlich egal. Hauptsache ich kann den irgendwie als boolean verwenden.

Danke schonmal im Voraus.

Viele Grüße
Ben
 
Werbung:
Code:
postgres=# select * from simuletsplay ;
 userid |   datum    
--------+------------
     31 | 2022-11-01
     35 | 2022-11-01
     31 | 2022-11-03
(3 rows)

postgres=# with d as (select distinct datum from simuletsplay ), u as (select * from simuletsplay where userid = 35) select d.datum, case when d.datum=u.datum then 'JA' else 'NEIN' end as anwesend from d cross join u order by datum;
   datum    | anwesend 
------------+----------
 2022-11-01 | JA
 2022-11-03 | NEIN
(2 rows)

postgres=#

gibt vermutlich mehr/bessere Lösungen ...
 
Irgendwie werden mir zu viele Ergebnisse ausgegeben... Hier ein Beispiel mit der ID 8:

Code:
with d as (select distinct datum from anwesenheit ), u as (select * from anwesenheit where mid = 8) select d.datum, case when d.datum=u.datum then 'JA' else 'NEIN' end as anwesend from d cross join u order by datum;

Diese Abfrage generiert 4560 Ergebnisse.
1668026001966.png
Leider auch das Datum mehrmals :(
 
eine Where-Klausel einrichten, denke ich ;)
weil so fragst du alle Datensätze ab, egal ob anwesend oder nicht.

ich versuche ein schnelles, simples Beispiel mit einer solchen Funktion aufzustellen:
Code:
select * from generate_series(1, 100) where generate_series%2 = 0;

diese Abfrage zeigt nur alle geraden Zahlen von 1 bis 100 an.

Muss mich in dein Problem noch reinlesen. (Denke aber where ist hier das Schlüsselwort)
 
Werbung:
sitze schon die letzte Stunde dran, und kann sie auch nicht lösen, wenn (wie ich aus dem Beispiel herauslese) nur eine Tabelle vorhanden ist.

Werde den Post von mr. Elephant noch ein wenig studieren ;)
 
Zurück
Oben