我正在开展一个跟踪已修复手机的项目。
在select语句中,我想找到重复的IMEI号码,并检查重复项之间的AddedDate是否少于30天。换句话说,如果AddedDate超过30天,则select应列出所有手机,甚至包括重复的IMEI号码。
我希望我说得够清楚。谢谢。
附加说明:
我已经通过在一个确实找到重复项的子选择下包含groupBy来尝试它,但是我无法实现if条件。相反,我打算将所有重复项放入动态表中,然后对该表使用select语句。在此之前,我想在这里发布我的问题。
例如,DB_Phones具有以下行
ID - AddedDate - IMEI
1 - 01.10.2012 - 123456789012345
2 - 15.10.2012 - 987654321012345
3 - 20.10.2012 - 123456789012345
基于上表,我想仅列出第二行(ID#2),因为最后一个副本(ID#3)没有在ID#1的行后30天添加。如果行是如下:
ID - AddedDate - IMEI
1 - 01.10.2012 - 123456789012345
2 - 15.10.2012 - 987654321012345
3 - 20.10.2012 - 123456789012345
4 - 21.11.2012 - 123456789012345
然后应该返回第二行和第四行。如果满足30天条件,我只需要返回其中一个副本(最后一个)。
我希望现在更有意义。再次感谢。
答案 0 :(得分:0)
猜测你的目标:
SELECT
r.*,
(SELECT COUNT(*) FROM Repairs r2 WHERE r.IMEI = r2.IMEI
AND r.ID != r2.ID) as NumberOfAllDuplicates,
(SELECT COUNT(*) FROM Repairs r2 WHERE r.IMEI = r2.IMEI
AND ABS(DATEDIFF(day, r.AddedDate, r2.AddedDate)) < 30
AND r.ID != r2.ID) as NumberOfNearDuplicates
FROM
Repairs r
这取决于具有ID字段以及一个表中存在的所有内容。使用相关的子查询,在长数据上可能不会很快。