Liebe tomedianer,

aus gegebenem Anlass möchten wir Ihnen versichern, dass wir alles dafür tun, um Ihnen in den kommenden Wochen auch weiterhin in gewohnter Art und Weise zur Verfügung zu stehen. Gleichzeitig ist es unsere Priorität, die Gesundheit und das Wohlbefinden unserer Nutzer und Mitarbeiter zu schützen und unseren Teil zur Eindämmung der Verbreitung von COVID-19 beizutragen. Aus diesem Grund haben auch wir ab sofort einige technische und organisatorische Maßnahmen getroffen, sodass u.a. ein Großteil unserer Mitarbeiter inkl. unserem Supportteam von zu Hause aus arbeiten kann. Wir bitten um Ihr Verständnis, falls es dadurch evt. zu längeren Wartezeiten an der Hotline bzw. bei der Beantwortung von E-Mail und/oder Forumsanfragen kommt.

Liebe Tomedos,

ich wollte eine SQL Bedigung in eine Aktionsauslösung einbauen um zu prüfen, ob der Patient > 70 Jahre ist:

SELECT geburtsdatum,
    
	date_part('year',age(geburtsdatum)) as age

FROM patient 

WHERE age>70

es funktioniert aber irgendwie nicht? Aktionsauslöser ist "Karteiöffnen"

ERROR:  column "age" does not exist

Ideen?

Gefragt von (1.6k Punkte)
0 Punkte

1 Antwort

In folgendem Therad hatte ich zwei funktionstüchtige (getestete) Beispiele angegeben.

https://forum.tomedo.de/index.php/16486/bugreport-aktionsketten-ausloser-privatrechnung-erzeugt-sql-error

Es fehlt also in Ihrem Beipsiel noch der konkrete Bezug zu dem Patienten, von dem Sie das Geburtsdatum haben wollen. Desweiteren ist es in Postgres-SQL nicht möglich, eine selbst erzeugte Spalte per 'where' zu überprüfen. Sie haben da zwei Möglichkeiten:

1. Eine Zwischentabelle anzulegen: select * from (select .. age from ...) A where A.age > 70.

2. Die Altersüberprüfung direkt im where-Teil zu machen: select .. from patient where date_part('year', age(geburtsdatum)) >70

Da es bei zweiter Abfrage unklar ist, wie performant das ganze ist , würd eich zu erster Variante tendieren. Für Ihr Beispiel also:

SELECT * from (SELECT date_part('year', age(geburtsdatum)) as age from patient where ident = $[patientident]$) A where A.age > 70

(ungetestet).
Beantwortet von (34.8k Punkte)
0 Punkte
5,876 Beiträge
10,193 Antworten
13,362 Kommentare
2,402 Nutzer