【问题标题】:How do I exclude multiple results from a query if a condition is met in one row如果一行中满足条件,如何从查询中排除多个结果
【发布时间】:2021-12-26 08:26:05
【问题描述】:

我有 2 个要加入的表:

此表显示了满足给定任务/技能组合的多个标准的所有员工,因此是分配给该任务的候选人:

task_id task_start task_end skill_id employee_id
1 2020-01-15 2020-01-20 38 1001
1 2020-01-15 2020-01-20 38 1002

此表显示已分配给员工的任务:

assign_id employee_id task_id skill_id assign_start assign_end
16285 1001 4 91 2020-01-01 2020-01-18
16286 1034 2 84 2020-04-01 2020-04-19

我正在尝试加入这些表以显示可以将哪些员工分配给某项任务。业务规则是员工一次只能完成一项任务。

如何在分配表中查询可能的日期重叠,然后从显示所有可能分配的结果表中排除该员工?

例如,任务 1,技能 38,员工 1001 可能适合分配(第一个表的用途),但在查询第二个表后,您会看到他们有一个日期与任务 1 的日期。

我想为所有可能的并且满足无日期重叠标准的任务生成一个包含 task_id、skill_id 和 employee_id 的表。

注意:一旦进行分配,查询将需要再次运行以将其与新数据进行比较...

【问题讨论】:

  • 你之前有没有试过解决?!而且,最后一个音符呢?哪里可以分配?在网站或应用程序中

标签: mysql join relational-database


【解决方案1】:
select
    task_id, skill_id, employee_id, max(task_end) as data_a
from
    employee a
where
    data_a > (select min(assign_end) from assigned b
        where a.employee_id = b.employee_id group by employee_id) group by employee_id

永远不要在 mysql 中测试它 只是执行一个线索

【讨论】:

  • 你能在这里澄清一下吗? “员工”是表 1 吗?你是如何加入表格的?
  • 员工表1,分配表2,不用加入,试试sql就知道结果了
猜你喜欢
  • 2015-01-25
  • 1970-01-01
  • 2015-10-13
  • 2021-06-06
  • 1970-01-01
  • 1970-01-01
  • 2020-09-11
  • 2022-10-24
  • 1970-01-01
相关资源
最近更新 更多