Thread: look for latest user login in one table from a list of users in a nother
look for latest user login in one table from a list of users in a nother
From
"Sill-II, Stephen"
Date:
I'm trying to come up with an efficient way to do the following task, but I haven't found the correct join syntax to do it. I have table "users" for keeping a list of users I need to check logins for. It contains the following fields: id,Full-Name,User-Name I have table called "logs" that contains the actual radius log data. The three fields I am concerned with are: User-Name,Date,Time I have gotten thus far almost what I want with the following query. SELECT users."User-Name",max(logs."Date") as login_date,max(logs."Time") as login_time FROM logs where logs."User-Name"=users."User-Name" GROUP BY users."User-Name"; This gives me the User-Name, date, and time of people WHO HAVE LOGGED IN. I'm looking to have a query that returns all of the users in the first table, including those who have not logged in. I have an external perl script that generates a nice html report for the manager. I have a script that parses the raw .csv files, but I'm trying to move it entirely to postgres, including if possible stored-procedures in plperl. I already have a perl script that imports the raw log files into the logs table. Am I on the right track? Thanks, Stephen Sill II
On Fri, 14 Mar 2003, Sill-II, Stephen wrote: > I'm trying to come up with an efficient way to do the following task, but I > haven't found the correct join syntax to do it. > > I have table "users" for keeping a list of users I need to check logins for. > It contains the following fields: > > id,Full-Name,User-Name > > I have table called "logs" that contains the actual radius log data. The > three fields I am concerned with are: > > User-Name,Date,Time > > I have gotten thus far almost what I want with the following query. > > SELECT users."User-Name",max(logs."Date") as login_date,max(logs."Time") as > login_time FROM logs where logs."User-Name"=users."User-Name" GROUP BY > users."User-Name"; Try foo=# SELECT users.name,someq.mlast from users left outer join (select id,max(last) as mlast from log group by id) as someq using(id); substituting with your names. > > This gives me the User-Name, date, and time of people WHO HAVE LOGGED IN. > I'm looking to have a query that returns all of the users in the first > table, including those who have not logged in. I have an external perl > script that generates a nice html report for the manager. I have a script > that parses the raw .csv files, but I'm trying to move it entirely to > postgres, including if possible stored-procedures in plperl. I already have > a perl script that imports the raw log files into the logs table. > > Am I on the right track? > > Thanks, > > Stephen Sill II > > > > ---------------------------(end of broadcast)--------------------------- > TIP 6: Have you searched our list archives? > > http://archives.postgresql.org > -- ================================================================== Achilleus Mantzios S/W Engineer IT dept Dynacom Tankers Mngmt Nikis 4, Glyfada Athens 16610 Greece tel: +30-210-8981112 fax: +30-210-8981877 email: achill@matrix.gatewaynet.com mantzios@softlab.ece.ntua.gr
Try: select users."User-Name", ss."Date", ss."Time" from users left outer join ( select distinct on ("User-Name") "User-Name", "Date", "Time" order by 1, 2 DESC, 3 DESC) as sson ( users."User-Name" = ss."User-Name") order by 1; It help if yo uhave an index on logs( "User-Name", "Date" desc, "Time" desc). JL PS Can't you convert "Date" || "Time" to timestamp? "Sill-II, Stephen" wrote: > > I'm trying to come up with an efficient way to do the following task, but I > haven't found the correct join syntax to do it. > > I have table "users" for keeping a list of users I need to check logins for. > It contains the following fields: > > id,Full-Name,User-Name > > I have table called "logs" that contains the actual radius log data. The > three fields I am concerned with are: > > User-Name,Date,Time > > I have gotten thus far almost what I want with the following query. > > SELECT users."User-Name",max(logs."Date") as login_date,max(logs."Time") as > login_time FROM logs where logs."User-Name"=users."User-Name" GROUP BY > users."User-Name"; > > This gives me the User-Name, date, and time of people WHO HAVE LOGGED IN. > I'm looking to have a query that returns all of the users in the first > table, including those who have not logged in. I have an external perl > script that generates a nice html report for the manager. I have a script > that parses the raw .csv files, but I'm trying to move it entirely to > postgres, including if possible stored-procedures in plperl. I already have > a perl script that imports the raw log files into the logs table. > > Am I on the right track? > > Thanks, > > Stephen Sill II > > ---------------------------(end of broadcast)--------------------------- > TIP 6: Have you searched our list archives? > > http://archives.postgresql.org