【问题标题】:comparison of 2 dates in multiple records比较多个记录中的 2 个日期
【发布时间】:2021-06-04 15:38:05
【问题描述】:

我有下表要比较

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

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

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

id idEmployee date
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 数据库

任何帮助或建议我应该如何进行查询?

【问题讨论】:

  • 谢谢,现在我检查一下
  • 您在问题中有“超过 60 天”和“不到 60 天”。真的是哪一个?

标签: mysql sql procedure


【解决方案1】:

使用存在方法:

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 天。不同的选择会删除重复项。

【讨论】:

  • 大于60天还是小于60天?
  • 你是对的朋友,你的查询是正确的。感谢您的帮助
  • 我对问题的细节感到困惑,但不到60天,它仍然是正确答案。谢谢
【解决方案2】:

您可以使用自加入

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

【讨论】:

  • 你是对的,我只需要购买极端日期并知道它是否少于 60 天,现在我正在制作一个可生产的例子,以免我的问题被否定
  • @Iteprevengo 但你说你想要那些小于 60 的。所以我认为第二个查询不起作用。
  • @eshirvana 问题不一致。首先它说“大于 60”,然后它说“小于 60”。
  • 我认为如果我需要比较所有记录,而不只是比较最小和最大日期,当员工的 covid 检测呈阳性时,将填写此表,然后我需要比较日期和将再次感染的计数保持在 60 天以内
  • 如果你说的没问题朋友,我已经更正了问题的细节
【解决方案3】:

一种方法是使用存在

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)

【讨论】:

  • @Barmar 这对我来说也不清楚(可能是所有反对票的来源)。
猜你喜欢
  • 2015-08-22
  • 1970-01-01
  • 2012-11-27
  • 1970-01-01
  • 1970-01-01
  • 2018-12-30
  • 1970-01-01
  • 2011-08-09
  • 2021-12-16
相关资源
最近更新 更多