Re: [SQL ] 求最新的密码变更日期和活跃用户

楼主: smlboby (波比)   2022-03-27 21:22:44
以下SQL应该可以满足你的需求
select TB_USER.id,max(TB_USERPWDHISTORY.createdat)
from TB_USER
left join TB_USERPWDHISTORY on TB_USER.id=TB_USERPWDHISTORY.id
where TB_USER.status=1
group by TB_USER.id
having max(TB_USERPWDHISTORY.createdat) < sysdate-90
createdat+90 > sysdate会有问题,为什么有问题,你可以再想想
※ 引述《ntpuisbest (阿龙)》之铭言:
: (针对 SQL 语言的问题,用这个标题。请用 Ctrl+Y 砍掉这行)
: 数据库名称: oracle
: 数据库版本:18.1.0
: 内容/问题描述:
: 我有两张表,以下是他们的table name还有对应的column
: 1. TB_USER
: id username email password status
: 2. TB_USERPWDHISTORY
: id userid password creatdate
: 第二张表会记录user 更改密码的历史,每次更动都会记录进去
: 所以同一个userid可能会有多笔纪录在第二章表中
: 并且第二张表的userid 是 foreign key
: 我的商业逻辑如下,
: 想要抓出 距离现在(sysdate)最近一次更改密码的日期
: 超过90天都未更改
: 并且status=1 的用户们
: 的user有谁,他们对应的
: username userid 以及 他们的email
: 来寄信
: 我自己尝试组过
: select userid,max(creatdat) from
: TB_USERPWDHISTORY WHERE creatdat+90> sysdate
: group by userid
: 好像where 放错位置
: 并且也没有跟 user 去做leftjoin
作者: ntpuisbest (阿龙)   2022-03-27 22:14:00
我来想想喔我的理解是要加上max才对,对吗?我这里有个问题是如果要加上email的话,势必要在groupby加上email,但是这样结果可能就不对了?
楼主: smlboby (波比)   2022-03-28 06:19:00
提示:当createdat=今天,会发生什么事?
作者: ntpuisbest (阿龙)   2022-03-28 08:58:00
懂了,等于今天+90就出问题了

Links booklink

Contact Us: admin [ a t ] ucptt.com