Php MySQL列出特定字段上的所有重复项,并且仅当另一个字段日期之间的日期
我在MySQL mytable中有一个表,如下所示:Php MySQL列出特定字段上的所有重复项,并且仅当另一个字段日期之间的日期,php,mysql,Php,Mysql,我在MySQL mytable中有一个表,如下所示: id car_num date ----- -------- ----------- 00001 BBB 2015-09-28 00002 BBB 2015-10-04 00003 DDD 2015-10-04 00004 BBB 2015-10-04 00005 AAA 2015-
id car_num date
----- -------- -----------
00001 BBB 2015-09-28
00002 BBB 2015-10-04
00003 DDD 2015-10-04
00004 BBB 2015-10-04
00005 AAA 2015-10-05
00006 GGG 2015-10-05
00007 GGG 2015-10-05
00009 EEE 2015-10-06
00010 AAA 2015-10-06
00011 HHH 2015-10-10
00012 FFF 2015-10-11
00013 FFF 2015-10-11
00014 CCC 2015-10-13
以下是我的查询,用于显示所有重复字段car_num:
SELECT a.*
FROM mytable a
INNER JOIN
(
SELECT car_num
FROM mytable
GROUP BY car_num
HAVING COUNT(car_num) >= 2
) b ON a.car_num = b.car_num
ORDER BY car_num ASC
结果是:
id car_num date
----- -------- -----------
00005 AAA 2015-10-05
00010 AAA 2015-10-06
00001 BBB 2015-09-28
00002 BBB 2015-10-04
00004 BBB 2015-10-04
00012 FFF 2015-10-11
00013 FFF 2015-10-11
00006 GGG 2015-10-05
00007 GGG 2015-10-05
现在,我只想在每两个重复项的日期字段之间的间隔小于或等于1天时显示重复项,并且我想按日期描述对它们进行排序
我所期望的是:
id car_num date
----- -------- -----------
00012 FFF 2015-10-11
00013 FFF 2015-10-11
00010 AAA 2015-10-06
00005 AAA 2015-10-05
00006 GGG 2015-10-05
00007 GGG 2015-10-05
00002 BBB 2015-10-04
00004 BBB 2015-10-04
可以直接使用MySQL查询DATEDIFF吗?感谢您的帮助您可以这样做:
select t.*
from mytable t
where exists (select 1
from mytable t2
where t.car_num = t2.car_num and
t.id <> t2.id and
abs(datediff(t2.date, t.date)) <= 1
);
您的描述和示例结果不一致。很抱歉,复制/粘贴错误:MySQL query Edited您的预期结果在重复之间有0或1天的间隔。这仍然与你的解释相矛盾。我只需要当一天小于或等于一天时,解释编辑。。。对不起我的英语我是frenchThanks,如果WHERE子句仅仅是t.car_num=t2.car_num,那么它似乎有效,但是现在我想比较更复杂的标准,比如upperreplaceCar_num,,,,,-,不是直接在car_num上。我尝试使用reduce_num.car_num=reduce_num2.car_num的函数传递param,但查询进入无限循环。有什么想法吗?@patrak1。你应该问另一个问题。你的问题对于所使用的匹配标准非常清楚。