MySql:从两个表中获取数据
我被mysql查询卡住了。无法继续 我有两个记录用户登录时间的表。当其中一个表包含条目时,应该考虑登录时间。我想找到一个月的用户登录总数 我可以一直到这里。但不知道如何得到和MySql:从两个表中获取数据,mysql,sql,join,Mysql,Sql,Join,我被mysql查询卡住了。无法继续 我有两个记录用户登录时间的表。当其中一个表包含条目时,应该考虑登录时间。我想找到一个月的用户登录总数 我可以一直到这里。但不知道如何得到和 select table1.employeeId , date(table1.loginTime) as date1 , date(table2.loginTime) as date2 from table1 inner join table2 on table1.employeeId
select table1.employeeId
, date(table1.loginTime) as date1
, date(table2.loginTime) as date2
from table1
inner join table2 on table1.employeeId=table2.employeeId
and table1.loginTime>='2017-01-01 00:00:00'
and table1.loginTime<='2017-01-31 23:59:59'
and table2.loginTime>='2017-01-01 00:00:00'
and table2.loginTime<='2017-01-31 23:59:59'
选择表1.employeeId
,日期(表1.登录时间)为日期1
,日期(表2.登录时间)为日期2
来自表1
表1上的内部联接表2.employeeId=表2.employeeId
表1.登录时间>='2017-01-01 00:00:00'
表1.loginTime='2017-01-01 00:00:00'
表2.loginTime您可以使用外部联接来实现这一点,但这将是不必要的复杂:
select employeeId
, count(*) as loginCount
from ( select employeeId
, loginTime
from table1
where loginTime between '2017-01-01 00:00:00'
and '2017-01-31 23:59:59'
union
select employeeId
, loginTime
from table2
where loginTime between '2017-01-01 00:00:00'
and '2017-01-31 23:59:59'
( as a
group by employeeId;
另一种方法:
SELECT
employeeId,
COUNT(1)+
(
SELECT COUNT(1)
FROM TABLE2 T2
WHERE MONTH(T2.loginTime) = 1
AND YEAR(T2.loginTime) = 2017
AND T2.employeeId = T1.employeeId
)
AS LOGINTIMES
FROM
TABLE1 T1
WHERE MONTH(loginTime) = 1
AND YEAR(loginTime) = 2017
GROUP BY employeeId
提琴示例:为什么员工1的计数是2而不是3?如果是同一个月,那么您的预期输出是错误的……如果月份是2月或年份是2018年呢?解决方案不应该是通用的?接受的解决方案也不是通用的。但这两个答案都可以转换为存储过程;我可以接受月份和年份作为参数,接受的答案是两个日期(月初和月底)。但这超出了问题的范围。