从另一个表中获取用户的最大日期

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 

请注意,我将查询更改为使用有意义的表别名。

【讨论】:

以上是关于从另一个表中获取用户的最大日期的主要内容,如果未能解决你的问题,请参考以下文章

从另一个表中获取包含一些数据的列表用户

如何在子查询中使用外部查询中的列从另一个表中获取结果?

在 ms Access 数据宏中从另一个表中获取数据

从查找表中获取每个类型和每个日期的最大 ID

MySQL:使用带有 WHERE 子句的 JOINS 从一个表中获取所有记录并从另一个表中获取可用记录

如何从另一张表中获取完全匹配的数据?