两个条目之间相同字段的MySQL比较 - 查询需要永远

时间:2015-01-23 17:34:47

标签: python mysql

我对数据库完全无用,但目前我不得不使用它。

我需要创建一个查询,将日期值与表格的不同条目进行比较。我有这样的查询:

SELECT t1.serial_number, t1.fault_type, t2.fault_type 
FROM  shipped_products t1 
      JOIN shipped_products t2 ON t1.serial_number=t2.serial_number 
WHERE ABS(DATEDIFF(t2.date_rcv,t1.date_rcv))<90;

但它需要永远运行。真的,我让它运行了18个小时,它从未停止过。这个查询是否正确?有没有更好,更聪明的方法呢?

非常感谢你们。

BTW:我将使用python脚本自动执行所有过程,所以如果你知道在python中更好的方法,而不需要在查询中包含所有逻辑,那么它也会有所帮助。

编辑: 我的问题似乎不清楚,所以我会更好地解释我需要做什么。 我有一个问题,有时产品去维修中心,并作为“没有发现的影响”运回客户。在此之后,客户将其运送到维修中心,因为他们提出了相同的问题。所以我需要一个查询来计算在90天的间隔内两次修理中心的产品数量。每个产品的唯一ID是它的序列号,这就是为什么我要搜索重复的真实数字。

2 个答案:

答案 0 :(得分:1)

每个记录将在此连接中匹配自身(在t1和t2中),因为DateDiff将是相同的,因此小于90.确保您不匹配同一记录。如果表中有ID字段,则可以执行以下操作:

SELECT t1.serial_number, t1.fault_type, t2.fault_type 
FROM  shipped_products t1 
      JOIN shipped_products t2 
      ON t1.serial_number=t2.serial_number 
      AND t1.ID <> t2.ID
WHERE ABS(DATEDIFF(t2.date_rcv,t1.date_rcv))<90;

还要确保你在serial_number上有一个密钥。

答案 1 :(得分:0)

我不清楚为什么你会想要在结果中重复。如果您有两行符合条件,则两者都将在结果集中。为什么不看一下以后的记录呢?如果您按如下方式对查询进行短语:

SELECT t1.serial_number, t1.fault_type, t2.fault_type 
FROM  shipped_products t1 JOIN
      shipped_products t2
     ON t1.serial_number = t2.serial_number 
WHERE t2.date_recv >= t1.date_rcv and
      t2.date_recv < t1.date_recv + interval 90 day;

然后,生成的查询可以利用shipped_products(serial_number, date_recv)上的索引。注意:也许90应该是180。

当我看到这种类型的自我加入时,我很怀疑。有时,它可以用聚合查询替换(有时不会)。但是,你真正想做的事情还不清楚。