mysql - 如何选择以查找具有唯一值的日期/时间重叠?

标签 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 

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

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

谢谢

最佳答案

未经测试:

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

关于mysql - 如何选择以查找具有唯一值的日期/时间重叠?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10489959/

相关文章:

mysql - 如何检查计数并基于该查询

mysql - 我的 mysql 查询是否正确? (好像不是)

php - mysqli_query 返回 null,找不到我出错的地方。 PHP-MySQL

mysql - 我需要 GROUP BY、LIMIT、ORDER BY、SUM 等。在动态创建的一组数据上,每次都会有不同的列

Mysql查询优化——它真的很慢

MySQL if 列用 CASE 语句重新计算,然后别名相同的名称,如何引用别名?

mysql - 以默认 MySQL 值执行计算

MySQL 显示不同版本

mysql - 从时间序列数据中获取高于阈值的时间量

MySQL:选择范围内的所有日期,即使没有记录存在