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

标签 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

我想在某个月从这个表中获取它 例如。 5 月 205 员工 1 在哪里 为此我设计了查询

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

但它并没有为所有用户提供正确答案

如果员工目前在某个办公室工作,那么 todate 将是未知的,因此它为空(如果您提出更好的建议,可以更改此逻辑)

最佳答案

如果我没理解错的话,你想要这个:

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 函数将日期分解为年月,然后确保您要查找的年月等于或晚于它们的开始日期,并且它们的 todate 为空,或者出现在您正在寻找的月/年组合。

这还应该包括他们在部分月份所在的办公室。

关于mysql - 根据时间跨度获取正确的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29411755/

相关文章:

sql - 在 SQL Server 2005 中设置和重置日期格式

sql - 我应该在查找表中使用代码吗

sql - 如何在 Excel 工作表中的命名范围上运行 SQL 语句?

java - JPA同步问题,需要重新启动应用程序

mysql - RDBM 与 Java 应用程序的比较

java - 我如何确定是否使用 Spring jpa 插入或更新记录

用于检查两个大写字母后跟数值的 SQL 约束

mysql - 按列分组的限制

mysql - 从两个不相关的 MySQL 查询中添加总计

sql - 查询剩余余额