2016-04-12 10 views
0

Ich versuche, die folgende Abfrage mit mehreren Filtern auszuführen. Ich bekomme immer einen Fehler. Wenn ich den Filter einzeln ausführe, läuft die Abfrage gut. Müssen mehrere Filter (wo ...) einfach nicht funktionieren?Mehrere Filter (wo ...) Bedingungen PostgreSQL

select count(distinct a.user) as total 
    ,count(distinct a.user) filter (where d.date >= current_date - '1 day'::interval) as 1_day 
    ,count(distinct a.user) filter (where d.date >= current_date - '3 days'::interval) as 3_day 
    ,count(distinct a.user) filter (where d.date >= current_date - '1 week'::interval) as 1_week 
    ,count(distinct a.user) filter (where d.date >= current_date - '1 month'::interval) as 1_month 
    from ppl d 
    join 
       (select distinct t.user from tbl t 
       join date dd 
        on t.date::date between dd.month_start and dd.month_end 
       where dd.date = current_date - '14 days'::INTERVAL 
       ) as a 
    on d.user = a.user 

Ich erhalte diese Fehlermeldung:

[Err] ERROR: syntax error at or near "1" 
LINE 2: ....lastedit_date >= current_date - '1 day'::interval) as 1_day 
                   ^
+0

Ich vermute (obwohl ich zu faul bin zu überprüfen), dass Ihre Feld-Aliase (1_day, 3_day, ...) nicht mit einer Ziffer beginnen können, wenn sie nicht zitiert werden. –

Antwort

2

Vom docs:

SQL identifiers and key words must begin with a letter (a-z , but also letters with diacritical marks and non-Latin letters) or an underscore (_)

Das bedeutet 1_day ist kein gültiger Bezeichner und Sie können es nicht ohne Doppel als Spaltennamen verwenden Zitate.