2017-11-14 13 views
0

は、TO_CHAR関数の中でWHERE条件を記述する方法がわからない ""ERROR:またはその近くの構文エラー ""

select 
    to_char(date_trunc('day',create_time),'DD Month YYYY') as date, 
    to_char(min(create_time),'HH24:mi') as login_time where login_status = 1, 
    to_char(max(create_time),'HH24:mi') as login_out where login_status = 0 
from 
    users.access_log 
where 
    user_id = 1010 
group by 
    user_id, actionlink_id, date_trunc('day', create_time) 

がまたはその近くにエラーを取得

をこのクエリを解決してください。

答えて

1

は、2つのログインおよびログアウトの行を持ってjoinを使用します。

select 
    to_char(date_trunc('day',create_time),'DD Month YYYY') as date, 
    to_char(min(a.create_time),'HH24:mi') as login_time, 
    to_char(max(b.create_time),'HH24:mi') as login_out 
from users.access_log a 
left join users.access_log b on b.user_id = a.user_id 
    and b.login_status = 0 
    and date_trunc('day', b.create_time) = date_trunc('day', a.create_time) 
    and b.actionlink_id = a.actionlink_id 
where a.user_id = 1010 
and a.login_status = 1 
group by a.user_id, a.actionlink_id, date_trunc('day', a.create_time) 
3

あなたはCASE expression、ないWHERE必要があります。

select 
    to_char(date_trunc('day',create_time),'DD Month YYYY') as date, 
    case when login_status = 1 then to_char(min(create_time),'HH24:mi') end as login_time, 
    case when login_status = 0 then to_char(max(create_time),'HH24:mi') end as login_out 
from 
    users.access_log 
where 
    user_id = 1010 
group by 
    user_id, actionlink_id, date_trunc('day', create_time) 
+0

は実は、これが正常に動作しているが、私はログインをしたいがログアウト時刻は日付と同じ行になければなりません。どうぞ、もう一度解決できますか? –

+0

@PrabhudevVatnal:これは[ピボット](https://stackoverflow.com/questions/tagged/postgresql+pivot)または[クロス集計](https://stackoverflow.com/questions/tagged/postgresql+crosstab)と呼ばれています。その –

+0

@a_horse_with_no_nameまたは[join](https://stackoverflow.com/a/47281854/256196)の多くの既存の回答を見てください。 – Bohemian

関連する問題