MySQL找到每个“组”的第一个

时间:2017-11-02 07:55:46

标签: mysql sql

我有一个表,其中包含Col2,Col3中升序和Col4中降序的数据。所以示例表如下:

    +------+------+------+------+
    | Col1 | Col2 | Col3 | Col4 |
    +------+------+------+------+
    |  11  |   a  |   b  |   1  |
    +------+------+------+------+
    |  21  |   a  |   b  |   0  |
    +------+------+------+------+
    |  31  |   d  |   c  |   0  |
    +------+------+------+------+
    |  41  |   a  |   e  |   0  |
    +------+------+------+------+
    |  22  |   f  |   a  |   1  |
    +------+------+------+------+
    |  23  |   f  |   a  |   0  |
    +------+------+------+------+

我想要完成的结果是获取Col2和Col3中没有重复数据的数据,并且那些具有重复项的数据仅检索Col4中具有“1”的数据。因此,使用上表,结果应为:

    +------+------+------+------+
    | Col1 | Col2 | Col3 | Col4 |
    +------+------+------+------+
    |  11  |   a  |   b  |   1  |
    +------+------+------+------+
    |  31  |   d  |   c  |   0  |
    +------+------+------+------+
    |  41  |   a  |   e  |   0  |
    +------+------+------+------+
    |  22  |   f  |   a  |   1  |
    +------+------+------+------+

这在MySQL中是否可行?

1 个答案:

答案 0 :(得分:3)

使用GROUP BY MIN()MAX()的查询似乎会产生想要的结果。

CREATE TABLE Table1
    (`Col1` int, `Col2` varchar(1), `Col3` varchar(1), `Col4` int);

INSERT INTO Table1
    (`Col1`, `Col2`, `Col3`, `Col4`)
VALUES
    (11, 'a', 'b', 1),
    (21, 'a', 'b', 0),
    (31, 'd', 'c', 0),
    (41, 'a', 'e', 0),
    (22, 'f', 'a', 1),
    (23, 'f', 'a', 0);
select min(`Col1`) Col1, `Col2`, `Col3`, max(`Col4`)
from Table1
group by `Col2`, `Col3`
order by `Col2`, `Col3`;
Col1 | Col2 | Col3 | max(`Col4`)
---: | :--- | :--- | ----------:
  11 | a    | b    |           1
  41 | a    | e    |           0
  31 | d    | c    |           0
  22 | f    | a    |           1

dbfiddle here

相关问题