多条记录中2个日期的比较

时间:2021-06-04 15:38:05

标签: mysql sql procedure

我有下表要比较

我必须比较每个员工的日期,如果日期范围小于 60 天,则必须提取该员工。 例子:

  • 编号为 4 的员工有 3 条记录 (4479,4192,1982)
  • 必须比较这 3 条记录(4479-4192、4479-1982、4192-1982)的组合日期,如果其中之一少于 60 天,则必须提取员工。

在示例表下方: http://sqlfiddle.com/#!9/b44d4e

<头>
id idEmployee 日期
1228 2 2020-06-11 21:10:53
3382 2 2020-06-11 12:37:04
2223 2 2020-08-17 21:10:57
4479 4 2020-08-17 12:37:08
4192 4 2020-07-29 12:37:08
1982 4 2020-07-29 21:10:56
2627 8 2020-04-16 12:37:02
474 8 2020-04-16 21:10:49
1002 10 2020-05-29 21:10:52
3150 10 2020-05-29 12:37:04

pd:mysql 数据库

有什么帮助或建议我应该如何查询?

3 个答案:

答案 0 :(得分:0)

一种方法是使用exists

select * from table t1
where exists ( 
  select 1 from table t2
  where t1.idEmployee = t2.idEmployee
  and t2.Id <> t1.id 
  and abs(datediff(t2.date, t1.date)) < 60)

答案 1 :(得分:0)

使用存在的方法:

SELECT DISTINCT idEmployee
FROM yourTable t1
WHERE EXISTS (SELECT 1 FROM yourTable t2
              WHERE t2.idEmployee = t1.idEmployee AND
                    DATEDIFF(t2.date, t1.date) > 60);

简单来说,上面的查询表示返回任何员工记录,我们可以找到同一员工相隔 60 天以上的另一条记录。不同的选择删除重复项。

答案 2 :(得分:0)

您可以使用自联接

SELECT DISTINCT a.idEmployee
FROM employees AS a
JOIN employees AS b ON a.idEmployee = b.idEmployee AND DATEDIFF(a.date, b.date) > 60

但是,您真的只需要将最极端的日期相互比较,而不是将所有日期与所有日期进行比较。如果它们相隔不到 60 天,则所有其他日期也必须更短。

SELECT idEmployee
FROM employees
GROUP BY idEmployee
HAVING DATEDIFF(MAX(a.date), MIN(a.date)) > 60