MySQL如何选择对应列值的第一个重复行
我有一个包含三列(a、B、C)的表。所有列都是数据类型varchar()。这里我只想选择列A的第一个重复值的初始行。像列A一样,列A有不同的值(1,2,3),因此需要检索列A中值为1的初始行。还有一件事,我的数据集中没有时间戳列MySQL如何选择对应列值的第一个重复行,mysql,Mysql,我有一个包含三列(a、B、C)的表。所有列都是数据类型varchar()。这里我只想选择列A的第一个重复值的初始行。像列A一样,列A有不同的值(1,2,3),因此需要检索列A中值为1的初始行。还有一件事,我的数据集中没有时间戳列 For value 1 in column A, i need to retrieve row that has 1,2,1 value for column (A,B,C) For value 2 in column A, i need to retrieve row
For value 1 in column A, i need to retrieve row that has 1,2,1 value for column (A,B,C)
For value 2 in column A, i need to retrieve row that has 2,4,1 value for column (A,B,C)
For value 3 in column A, i need to retrieve row that has 3,1,1 value for column (A,B,C)
A|B|C
-----
1|2|1
3|1|2
3|3|1
2|4|1
3|1|2
3|1|4
1|2|3
Now i want a Output Table as describe below.
A|B|C
-----
1|2|1
3|1|2
2|4|1
考虑以下几点。为了简单起见,我使用了一个自动递增的id,但是一个唯一的时间戳也可以使用
DROP TABLE IF EXISTS my_table;
CREATE TABLE my_table
(id INT NOT NULL AUTO_INCREMENT PRIMARY KEY
,A INT NOT NULL
,B INT NOT NULL
,C INT NOT NULL
,UNIQUE(a,b,c)
);
INSERT INTO my_table (a,b,c) VALUES
(1 ,2 ,1),
(1 ,1 ,2),
(2 ,3 ,1),
(2 ,4 ,1),
(3 ,1 ,2),
(3 ,1 ,4),
(3 ,2 ,3);
SELECT x.* FROM my_table x ORDER BY id;
+----+---+---+---+
| id | A | B | C |
+----+---+---+---+
| 1 | 1 | 2 | 1 |
| 2 | 1 | 1 | 2 |
| 3 | 2 | 3 | 1 |
| 4 | 2 | 4 | 1 |
| 5 | 3 | 1 | 2 |
| 6 | 3 | 1 | 4 |
| 7 | 3 | 2 | 3 |
+----+---+---+---+
SELECT x.*
FROM my_table x
JOIN
( SELECT a
, MIN(id) min_id
FROM my_table
GROUP
BY a
) y
ON y.a = x.a
AND y.min_id = x.id
ORDER
BY id;
+----+---+---+---+
| id | A | B | C |
+----+---+---+---+
| 1 | 1 | 2 | 1 |
| 3 | 2 | 3 | 1 |
| 5 | 3 | 1 | 2 |
+----+---+---+---+
有关此问题的详细信息,请参阅手册()。@Sebas请在这里帮助我。您的专栏中没有“时间”,因此没有“第一次”。@Kunal2229您必须定义“第一次”的含义。它是任意的还是取决于其他列?@Sebas这里首先是,假设like列A有两次1,所以我想要列A的第一个值1,并且想要列A的所有其他值也和它一起。正如您可以看到的2个表,第一个表是输入的,第二个表是输出的,在应用这样的查询之后。@草莓我有一个巨大的数据集,其中包含时间戳列,但在这里我不能显示我的数据集,所以我只提供了一些示例,以便您能够轻松理解。感谢您在这里帮助我解决问题,我真的非常感谢