根据时间跨度获取正确的行

时间:2015-04-02 11:25:13

标签: mysql sql

我有这样的结构表

  empid   fromdate       todate       office_ID
    1     2012-03-01      2014-04-2      1
    1     2014-04-03      ----           2
    2     2012-03-01      2014-04-2       2
    3     2012-03-01      2014-04-2        1

从这张桌子我想在某个月拿到它 对于前对于可能205 ,员工1在哪里 为此我设计了查询

    select* from tbl_emp_office where   (year(From_date)*100+ month(From_date)) < '201505'  

但是没有为所有用户提供正确的答案

如果员工目前在某个办公室工作,那么todate将不知道因此它是null(如果你建议更好的话,这个逻辑可以改变)

1 个答案:

答案 0 :(得分:1)

如果我理解正确,你想要这个:

select office_id 
  from employee_history 
    where year(fromdate) <= 2015 
      and month(fromdate) <= 5 
      and (
        (month(todate) >= 5 and year(todate) >= 2015) 
        or todate is null
      )
      and empid = 1;

查询使用mysql函数将日期分解为年份和月份,然后确保您要查找的月份和年份等于或等于其startdate,并且它们的todate为null或者在你正在寻找的月/年组合。

这还应该包括他们在一个月内的办公室。