MySQL在具有重复列值的行中查找差异
假设我有一个表MySQL在具有重复列值的行中查找差异,mysql,group-by,duplicates,Mysql,Group By,Duplicates,假设我有一个表TAPS id sequence card_tap time 1 1 61 1 1 1 62 10 1 2 2 20 1 2 2 20 2 11 12 5 2 11 12 5 2 12 62 10 2 12 61 20 我
TAPS
id sequence card_tap time
1 1 61 1
1 1 62 10
1 2 2 20
1 2 2 20
2 11 12 5
2 11 12 5
2 12 62 10
2 12 61 20
我想找到id
和sequence
相同而card\u轻触
和time
不相同的行
它应该会回来
id sequence card_tap time
1 1 61 1
1 1 62 10
2 12 62 10
2 12 61 20
就凭这个
Select * from tabs where id = sequence and card_tap != time
这假设每个
{id,sequence}
SELECT t1.*
FROM taps t1
JOIN taps t2
ON t1.id = t2.id
AND t1.sequence = t2.sequence
WHERE t1.time <> t2.time
OR t1.card_tap <> t2.card_tap
选择t1*
来自taps t1
连接接头t2
在t1.id=t2.id上
t1.sequence=t2.sequence
其中t1.time t2.time
或t1.卡式点击t2.卡式点击
如果有两行以上,则会得到重复的行,因此可能需要添加
DISTINCT
数据似乎未规范化。无论如何,根据您的标记,我猜您正在寻找返回所有结果的内容,如:
select distinct * from taps;
或
您需要添加一个带有
索引的唯一ID
,以更好地处理数据。如果您看到OP expected Output2 12
我想您误解了问题哦,好的。。然而,这是一个非常糟糕的解释:“id和sequence是相同的”我解释id=sequence…您有一个名为id
的字段,但这不是唯一的标识符?这是一个关系表吗?id和序列是相同的,所以id=序列??预期输出id=2 seq=12??问题somewhere@leoID=ID
和sequence=sequence
我打赌这个问题是由非规范化数据集引起的。请注意,在缺少主键的情况下,您并没有真正的表,而且,在尝试针对此数据集构建查询时,您可能会遇到一些严重的困难。@为什么您认为需要distinct?是这样的,或者t1.time>t2。time@Strawberry我有其中t1.time t2.time
@草莓行{1,1,61,1}只与自身和{1,1,62,10}匹配由于其本身的值相同且未选中,因此只返回一个匹配项。因此我认为不需要它。但您可以向我展示一个示例,其中有重复的行。@草莓是的,我感觉不错,只是有点饿了;)。您的示例添加了另一行,不在OP问题中。但别担心,我已经包含了该假设n答案以防万一,添加distinct as additional fix以防万一,这是一种可能返回所有行。但是我想你可以添加HAVING AVG()MAX()
@JuanCarlosOropeza你在哪里想出AVG()
和MAX()
值?它们不寻找限制,只是复制记录。检查OP desire output。您需要返回id=id、seq=seq但time或tap不同的行。您的解决方案返回所有行。但如果您分组,您可以判断它们是否有不同的值检查avg()max()
select * from taps group by card_tap,time;