Mysql 从表中获取日期和最后原因的上次日志时间和发生次数
我有一张桌子Mysql 从表中获取日期和最后原因的上次日志时间和发生次数,mysql,sql,Mysql,Sql,我有一张桌子 ID USER LOG_TIME REASON 1 PK 2018-07-11 11:00:00 R1, R2 2 PK 2018-07-11 10:00:00 R1 3 AK 2018-07-11 11:00:00 R2 4 PK 2018-07-11 11:30:00 R2 5 AK 2018-07-11 10:00:00 R1 6 PK 2018-07-10 10:00:00 R1, R2 7 AK 2018-07-11
ID USER LOG_TIME REASON
1 PK 2018-07-11 11:00:00 R1, R2
2 PK 2018-07-11 10:00:00 R1
3 AK 2018-07-11 11:00:00 R2
4 PK 2018-07-11 11:30:00 R2
5 AK 2018-07-11 10:00:00 R1
6 PK 2018-07-10 10:00:00 R1, R2
7 AK 2018-07-11 09:00:00 R1, R2
8 AK 2018-07-11 07:00:00 R1
9 PK 2018-07-10 11:00:00 R2
10 AK 2018-07-10 11:00:00 R1, R2
我需要最后一次日志记录时间的详细信息,以及2018-07-11的最后原因和日志数。我使用的查询是
select USER, max(LOG_TIME) as LAST_LOG, max(REASON) as REASON, case when date_format(LOG_TIME,'%Y-%m-%d')='2018-07-11' then count(*) end as CtLog from LogHistory group by USER order by USER;
我得到的结果是错的。我需要的结果如下
USER LAST_LOG REASON CtLog
PK 2018-07-11 11:30:00 R2 3
AK 2018-07-11 11:00:00 R2 4
需要进行哪些更改
您可以在找到表和查询。这里有一种方法,使用相关子查询获取当天最后一条记录的信息,然后使用另一个子查询获取计数:
select lh.*,
(select count(*)
from loghistory lh2
where lh2.user = lh.user and
lh2.log_time >= '2018-07-11' and
lh2.log_time < '2018-07-12'
) as cnt
from loghistory lh
where lh.log_time = (select max(lh2.log_time)
from loghistory lh2
where lh2.user = lh.user
) and
lh.log_time >= '2018-07-11' and
lh.log_time < '2018-07-12';
团队中的最大值在这里被多次询问和回答。。可能重复使用
where date\u格式(日志时间,%Y-%m-%d')='2018-07-11'
而不是case
语句
select lh.*, lhmax.cnt
from (select user, count(*) as cnt, max(lh.log_time) as max_log_time
from loghistory lh
where lh.log_time >= '2018-07-11' and
lh.log_time < '2018-07-12'
group by user
) lhmax join
loghistory lh
on lh.user = lhmax.user and lh.log_time = lhmax.max_log_time;