MySql:从两个表中获取数据

时间:2017-02-07 18:13:06

标签: mysql sql join

我遇到了mysql查询。无法继续。

我有2个表,其中记录了用户的登录时间。当表中的任何一个包含条目时,应该考虑登录时间。我想查找一个月的用户登录总和。

我可以到达这里。但无法理解如何获得总和

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'

enter image description here

例如:count = 0 employe1已记录
2017年1月1日在table1&amp; table2&lt; - count ++(如果他登录2个表,那么只应考虑1个计数)

2017年1月2日在table1&lt; - count ++

因此,对于employee1计数为2

2 个答案:

答案 0 :(得分:1)

你可以用外连接做到这一点,但它会不必要地复杂:

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; 

答案 1 :(得分:0)

另一种方法:

    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

示例小提琴:http://sqlfiddle.com/#!9/45ce27/3/0

相关问题