作者smlboby (波比)
看板Database
标题Re: [SQL ] 求最新的密码变更日期和活跃用户
时间Sun Mar 27 21:22:44 2022
以下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
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 182.234.37.8 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Database/M.1648387366.A.CD4.html
1F:推 ntpuisbest: 我来想想喔 03/27 22:14
2F:推 ntpuisbest: 我的理解是要加上max才对,对吗? 03/27 23:42
3F:→ ntpuisbest: 我这里有个问题是如果要加上email的话,势必要在group 03/27 23:42
4F:→ ntpuisbest: by加上email,但是这样结果可能就不对了? 03/27 23:42
5F:→ smlboby: 提示:当createdat=今天,会发生什麽事? 03/28 06:19
6F:推 ntpuisbest: 懂了,等於今天+90就出问题了 03/28 08:58