【问题标题】:Write a query for overlapping time in this example在这个例子中写一个重叠时间的查询
【发布时间】:2015-08-15 18:05:48
【问题描述】:

想象一下,我有一个包含以下数据的表格:

我想写一个查询,给出: 例如有重叠时间的客户:

Row 2,3
because customer of these are the same and the overlapping time

【问题讨论】:

  • 你想要什么样的输出??
  • 没关系,表
  • 你用的是什么mysql或者sql server?哪个版本?虽然根据您提供的有限信息,wewestthemenace 的回答是正确的,但根据您的 rdbms 和版本可能会有更好的选择

标签: mysql sql-server tsql


【解决方案1】:

这是一种使用SELF-JOIN 的方法。这对于大型表可能效率不高:

SELECT t1.* 
FROM TestData t1
INNER JOIN TestData t2
    ON t2.Customer = t1.Customer
    AND t2.EndDate >= t1.StartDate
    AND t2.StartDate <= t1.EndDate
    AND t1.Row <> t2.Row

SQL Fiddle

【讨论】:

    【解决方案2】:
    SELECT a.Row
          ,a.customer
          ,a.start
           ,a.end
          ,b.ColumnId AS OverlappedId 
          ,b.InTime   AS OverlappedInTime 
          ,b.OutTime  AS OverlappedOutTime 
      FROM Time  AS a 
      JOIN Time  AS b ON ((a.start BETWEEN b.start AND b.end) 
                           OR  (a.end BETWEEN b.start AND b.end)) 
                          AND  (a.row!= b.row) 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-12-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-12
      • 1970-01-01
      • 2010-10-15
      相关资源
      最近更新 更多