1

我有以下表结构。我想根据 office_id 和最新的 login_datetime 选择不同的 user_id。

tbl_id      user_id     office_id login_datetime
----------------------------------------
1           2           28          12/28/2012 5:35:50 AM
2           2           15          12/28/2012 5:35:50 AM
3           3           20          12/28/2012 5:35:50 AM
4           4           28          12/28/2012 5:35:50 AM
5           2           28          12/28/2012 5:35:50 AM
6           4           15          12/28/2012 5:35:50 AM
7           3           20          12/28/2012 5:35:50 AM

我试过了:

SELECT user_id as u_id,office_id,
(select login_datetime from tbl t2 where t2.user_id=u_id AND ROWNUM=1 ORDER BY t2.tbl_id DESC ) as LAST_LOGIN  
FROM tbl
GROUP BY user_id,office_id

但是,它对我不起作用,有什么帮助吗?

4

3 回答 3

3

采用Window Function

SELECT  tbl_id, user_id, office_id,login_datetime
FROM    
    (
        SELECT tbl_id, user_id, office_id,login_datetime,
                ROW_NUMBER() OVER (PARTITION BY user_id, "office_id"
                                    ORDER BY login_datetime DESC) rn
        FROM tableName
    ) a
WHERE   a.rn = 1
于 2013-01-14T06:25:26.620 回答
2

另一种解决方案是直接group by使用 a keep dense rank

select user_id, office_id, 
 max(login_datetime) keep (dense_rank first order by login_datetime desc) as latest_login_datetime
from tbl
group by user_id, office_id 

或者如果你想要唯一的 user_id:

select user_id, 
 max(office_id)  keep (dense_rank first order by login_datetime desc) as lastest_office_id, 
 max(login_datetime) keep (dense_rank first order by login_datetime desc) as latest_login_datetime
from tbl
group by user_id
于 2013-01-14T06:45:03.497 回答
0

好的,我已将示例更改为 ORACLE

我将解释查询

首先,我选择一个不同的 user_id 和 office id(因此,如果一个用户属于两个办公室,他将返回两次),然后选择 MAX login_datetime 以获取最新的日期时间,

然后在 WHERE 中,我通过 office_id 过滤查询,它等于所有不同的办公室。(基本上我正在返回一个不同的 office_id 表)

最后,由于 MAX 功能,我按 user_id 和 office_id 分组

SELECT 
DISTINCT "user_id" ,
"office_id",
 MAX("login_datetime")
FROM TableName
WHERE "office_id" IN (SELECT DISTINCT "office_id" FROM TableName)
GROUP BY 
  "user_id",
  "office_id"

SQL 小提琴示例

于 2013-01-14T06:31:05.040 回答