我对数据库完全无用,但目前我不得不使用它。
我需要创建一个查询,将日期值与表格的不同条目进行比较。我有这样的查询:
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是它的序列号,这就是为什么我要搜索重复的真实数字。
答案 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。
当我看到这种类型的自我加入时,我很怀疑。有时,它可以用聚合查询替换(有时不会)。但是,你真正想做的事情还不清楚。