【问题标题】:MySQL: Select data in a date range when date count exceeds a given amountMySQL:当日期计数超过给定数量时选择日期范围内的数据
【发布时间】:2019-07-01 07:13:06
【问题描述】:

我想从两个日期之间的出勤日志中选择一组到那时已经工作超过 10 天的员工。因此,在检查的日期范围内,雇主可能已经超过 10 天或可能超过 10 天。日志表(见下文)包含每个雇主每天的一条记录。

emp_id | date
1      | 2019-01-25
1      | 2019-01-26
1      | 2019-01-27
1      | 2019-01-28
1      | 2019-01-29
1      | 2019-01-30
1      | 2019-01-31
1      | 2019-02-01
1      | 2019-02-02
1      | 2019-02-03
1      | 2019-02-04

2      | 2019-01-29
2      | 2019-01-30
2      | 2019-01-31
2      | 2019-02-01
2      | 2019-02-02
2      | 2019-02-03
2      | 2019-02-04
2      | 2019-02-05

3      | 2019-01-23
3      | 2019-01-24
3      | 2019-01-25
3      | 2019-01-26
3      | 2019-01-27
3      | 2019-01-28
3      | 2019-01-29
3      | 2019-01-30
3      | 2019-01-31
3      | 2019-02-01
3      | 2019-02-02    

选择日期范围 2019-02-01 到 2019-02-05。

  • Emp 1 - 截至 2019-02-01,他已经工作了 8 天。
  • Emp 1 - 到 2019-02-04,他已经工作了 11 天。
  • Emp 2 - 到 2019-02-01,他已经工作了 4 天。
  • Emp 2 - 到 2019-02-05,他已经工作了 8 天。
  • Emp 3 - 到 2019-02-01,他已经工作了 10 天。
  • Emp 3 - 到 2019-02-05,他已经工作了 14 天。

所以从上面的数据集中只有 Emp 1 和 Emp 3 应该被选择。 雇主必须在日期范围内超过 10 天。

我在 MySQL 中编写了以下查询,但它没有完成工作。应该怎么写?

SELECT emp_id FROM log
WHERE date BETWEEn '2019-02-01' AND '2019-02-05'
GROUP BY emp_id
HAVING COUNT(emp_id) > 14;

【问题讨论】:

  • 你能把你的表结构和几行数据贴出来吗?
  • 更新您的问题并将表格架构添加到适当的数据样本和预期结果..(您的实际数据样本没有用)
  • 添加表格数据

标签: php mysql sql group-by


【解决方案1】:

您可以在WHEREHAVING 之间拆分日期条件:

SELECT emp_id
FROM log
WHERE date <= '2019-02-05' -- select all entries until this date
GROUP BY emp_id
HAVING MAX(date) >= '2019-02-01' -- employee has at least one log entry on / after this date
AND COUNT(emp_id) > 10 -- more than 10 entries between the two dates

【讨论】:

    【解决方案2】:

    我认为您想要工作日大于等于 10 的员工的记录。因此您可以应用子查询来制定这些员工的数量并将结果返回给主查询。

    SELECT l1.emp_id FROM log l1
    WHERE (select Count(*) from log l2 
             where l1.emp_id=l2.emp_id 
              && l2.date BETWEEN '2019-02-01' AND '2019-02-05') >=10
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-12-13
      • 1970-01-01
      • 2010-09-19
      • 1970-01-01
      • 1970-01-01
      • 2021-05-06
      相关资源
      最近更新 更多