从另一个表中获取用户的最大日期
Posted
技术标签:
【中文标题】从另一个表中获取用户的最大日期【英文标题】:Get max date for user from another table 【发布时间】:2021-03-16 07:57:53 【问题描述】:我有两张表,一张用于存储用户状态,另一张用于存储日志。
“状态”表
id , customerId, userName, serviceId, status
“日志”表
id, customerId, logDate, status
我需要为每个客户获取特定日期间隔(从 2020 年 10 月 1 日到 2020 年 11 月 31 日)和特定状态(状态 = 6)的最新日志。所有客户日志都存储在“日志”表中。
这是我尝试过的,但没有运气:
Select distinct (a.customerId), a.userName, a.serviceId, a.status, max(logDate)
FROM status a
JOIN logs b
WHERE logDate BETWEEN '2020-10-01' AND '2020-11-31' and a.customerId = b.customerId and a.status = 6 group by b.logDate
任何帮助将不胜感激。
【问题讨论】:
(1) 标记您正在使用的数据库。 (2) 样本数据和预期结果会有所帮助。 (3)DISTINCT
不是一个函数。括号没有保证。特别感兴趣的是customerId
是否在status
表中重复。
【参考方案1】:
您的 group by
子句已关闭:您需要按所有非聚合列分组。
select s.customerid, s.username, s.serviceid, s.status, max(l.logdate) as maxlogdate
from status s
inner join logs l
where
l.logdate >= '2020-10-01'
and l.logdate < '2020-12-01'
and l.customerid = s.customerid
and s.status = 6
group by s.customerid, s.username, s.serviceid, s.status
一些数据库支持只将status
表的主键放在group by
子句中。假设是customerid
:
group by s.customerid
请注意,我将查询更改为使用有意义的表别名。
【讨论】:
以上是关于从另一个表中获取用户的最大日期的主要内容,如果未能解决你的问题,请参考以下文章