如何选择查找与唯一值重叠的日期/时间?

时间:2012-05-07 22:23:01

标签: mysql

好奇人们如何有效地解决以下问题。

有一个简单的表格,可以跟踪报告的一组“批准者”。还可以跟踪何时“创建”报告以及何时“提交”报告。创建和提交报告之间的时间跨度应该是批准者ID提交给单个报告的时间,但是如果他们的批准者ID显示在我要标记的另一个报告的相同时间范围内。

示例(一个表,“报告”):

"Created"                 "Submitted"                "ApproverID"
4/20/2012 5:01:32 AM          4/20/2012 5:30:32 AM          10
4/20/2012 5:08:32 AM          4/20/2012 5:45:32 AM          10
4/20/2012 5:01:32 AM          4/19/2012 5:38:16 PM          15 

在这个例子中,我想SELECT并返回重叠的行,它们是:

 "Created"                 "Submitted"                "ApproverID"     "Duplicate_ID"
4/20/2012 5:01:32 AM          4/20/2012 5:30:32 AM          10            1
4/20/2012 5:08:32 AM          4/20/2012 5:45:32 AM          10            1

...并且可能附加一个新的“Duplicate”列,其中包含一个唯一的值来报告特定的重叠点击,我可以在其上执行SELECT DISTINCT Duplicate_ID。

我和BETWEEN一起玩过但无济于事。任何帮助表示赞赏!

谢谢

2 个答案:

答案 0 :(得分:0)

UNTESTED:

SELECT R1.Created, R1.Submitted, R1.ApproverID, count(*) 
FROM reports R1
INNER JOIN reports R2
  on R1.Created between R2.Created and R2.Submitted --ON
  OR R2.created between R2.Created and R2.submitted --OR
GROUP BY R1.Created, R1.Submitted, R1.ApproverID

答案 1 :(得分:0)

无论如何,这会为您提供相互冲突的报告列表:

SELECT r1.approvalID, r2.approvalID
FROM reports r1
JOIN reports r2
  ON r2.approverID = r1.approverID
  AND r2.created < r1.created
  AND r2.submitted >= r1.created
  AND r2.submitted < r1.submitted

这假设您有一个名为approvalID的主键。