我目前正在研究该Oracle数据库,以根据许多条件找出不活动的关系。
因此,目前我有一个CASE语句,可以使用上次登录日期来计算“状态”字段。
以下是我要检查的条件。
我试图再次将结果表选择到FROM子句中,希望可以填充数据。但我不知道该怎么写。
SELECT t1.UserName,
t1.UserID,
t1.LastLoginDate,
t1.status
FROM (SELECT UserName,
UserID,
LastLoginDate,
(CASE
WHEN LastLoginDate > ADD_MONTHS ('01-Jul-2019', -6)
THEN
'Active'
END)
AS status
FROM User_Mas_Table) t1
以上查询为我提供了以下结果。
UserName UserID LastLoginDate STATUS
---------- ---------- --------------- ------
AAAAAA 1 7/23/2019 Active
AAAAAA 2 7/24/2019 Active
AAAAAA 3 11/7/2018
CCCCCC 4 7/24/2019 Active
BBBBBB 5 4/30/2019 Active
DDDDDD 6 5/24/2019 Active
EEEEEE 7 7/22/2019 Active
FFFFFF 8 3/14/2019 Active
GGGGGG 9 7/24/2019 Active
GGGGGG 10 5/14/2018
HHHHHH 11 4/30/2019 Active
我还需要同时填充那些空的。
答案 0 :(得分:0)
使用窗口功能比较所有个用户帐户的最新登录日期:
select um.*,
(case when max(lastlogindate) over (partition by username) > add_months(date '2019-07-01', -6)
then 'Active'
end) as status
from User_Mas_Table um;
如果您只希望帐户具有lastlogindate
时处于“活动”状态,则逻辑为:
select um.*,
(case when lastlogindate is not null and
max(lastlogindate) over (partition by username) > add_months(date '2019-07-01', -6)
then 'Active'
end) as status
from User_Mas_Table um;