我有下表要比较
我必须比较每个员工的日期,如果日期范围小于 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 数据库
有什么帮助或建议我应该如何查询?
答案 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