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

我被mysql查询卡住了。无法继续

我有两个记录用户登录时间的表。当其中一个表包含条目时,应该考虑登录时间。我想找到一个月的用户登录总数

我可以一直到这里。但不知道如何得到和

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年呢?解决方案不应该是通用的?接受的解决方案也不是通用的。但这两个答案都可以转换为存储过程;我可以接受月份和年份作为参数,接受的答案是两个日期(月初和月底)。但这超出了问题的范围。