postgresql - postgres query error for GROUP BY clause -
i have table login_logout time
id user_id start end total(sec) -------------------------------------------------------------------------------------- 1 1 "2014-04-14 12:17:54.772" "2014-04-14 12:17:55.772" 1 2 1 "2014-04-14 12:22:41.763" "2014-04-14 12:31:14.295" 512 3 2 "2014-04-14 12:43:51.823" "2014-04-14 12:48:40.706" 288 4 2 "2014-04-14 13:22:51.656" "2014-04-14 13:22:52.656" 1 i want data in format
user : 1 ------------------------------------------------------------------ start_time end_time total (seconds) "12:17" "12:17" 1 "12:22" "12:31" 512 total: 513 user : 2 ------------------------------------------------------------------ "12:43" "12:48" 288 "13:22" "13:22" 1 total 289 but getting date in format
user : 1 ------------------------------------------------ start_time end_time total (seconds) "12:17" "12:17" 1 total : 1 user : 1 ------------------------------------------------ "12:22" "12:31" 512 total : 512 user : 2 ------------------------------------------------ "12:43" "12:48" 288 total : 288 user : 2 ------------------------------------------------ "13:22" "13:22" 1 total : 1 the query :
select l.user_id, substr(cast (l.start::time text), 1,5) starttime, substr(cast (l::time text), 1,5) endtime, sum(total) login_logout l group l.user_id, starttime, endtime i understand happening because of starttime,endtime added in group clause.
when remove it, famous 'must appear in group clause or used in aggregate function' error.
can please in solving this?
try this
select l.user_id, substr(cast (min(l.stime)::time text), 1,5) starttime, substr(cast (max(l.etime)::time text), 1,5) endtime, sum(total) login_logout l group l.user_id it give following ouptut:
uid starttime endtime total 1 12:17 12:31 513 2 12:43 13:22 289 or
select cast(uid text) || '2' ord, null uid,'' starttime,'' endtime, sum(tse) tt group uid union select cast(uid text) || '1' ord, l.uid, substr(cast (min(l.stime)::time text), 1,5) starttime, substr(cast (max(l.etime)::time text), 1,5) endtime, sum(tse) tt l group l.uid, l.stime, l.etime order ord the ord column used order by
this output show this
ord uid starttime endtime total 11 1 12:22 12:31 512 11 1 12:17 12:17 1 12 513 21 2 13:22 13:22 1 21 2 12:43 12:48 288 22 289
Comments
Post a Comment