1

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

有一个简单的表格来跟踪报告的一组“批准者”。还跟踪报告的“创建”时间和“提交”时间。创建和提交报告之间的时间跨度应该是批准人 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 

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

 "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 但无济于事。任何帮助表示赞赏!

谢谢你

4

2 回答 2

0

未经测试:

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
于 2012-05-07T22:33:45.630 回答
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 的主键。

于 2012-05-07T22:40:37.003 回答