3

表是users,列是user_id, firstname, lastname, area

另一个表是user_sessions, 列是user_id, logon, logoff

要查看谁登录,我使用

select u.FIRSTNAME, u.LASTNAME, u.PHONE_ID, us.LOGON 
from USERS u 
    join USER_sessions us on u.USER_ID=us.user_id 
where cast (us.LOGON as date) = date 'now' 
and us.LOGOFF is null 
order by u.FIRSTNAME

结果是正确的,但有时我会得到重复的条目。

例如,相同firstname的和lastname,但不同的登录。我只想看到最新的登录。

4

1 回答 1

2

看起来 fieldLOGON是一种时间戳类型的字段;你的问题不是很精确,那里。

所以,我认为,你想要 的最大值LOGON。为此,有一个聚合函数MAX()必须与 a 一起使用GROUP BY

select u.FIRSTNAME, u.LASTNAME, u.PHONE_ID, MAX(us.LOGON)
  from USERS u 
  join USER_sessions us
    on u.USER_ID = us.user_id 
  where cast (us.LOGON as date) = date 'now' 
    and us.LOGOFF is null
  group by u.FIRSTNAME, u.LASTNAME, u.PHONE_ID 
  order by u.FIRSTNAME

您将获得LOGON每次出现的最新信息u.FIRSTNAME, u.LASTNAME, u.PHONE_ID

请注意,您可以使用current_date上下文变量而不是date 'now'强制转换。

于 2017-05-03T13:19:12.817 回答