如何根据一列的最大值从 MySQL 中提取 select 行并将其他两列分组?
How to select rows from MySQL based on max value of a one column and grouping two other columns?
如何根据一列的最大值将 MySQL 中的行 select 行分组,并将其他两列分组?查询需要按code分组,group by element_id with where clause (element_id=1.B.1.b) and max(data_value).
code element_id data_value
11-1011.00 1.B.1.a 1.33
11-1011.00 1.B.1.b 2.00
11-1012.00 1.B.1.a 2.67
11-1012.00 1.B.1.b 3.67
11-1012.00 1.B.1.C 7.00
我试过这个:
SELECT * FROM (select
max(`data_value`) as maxID, `code`, `element_id`
from
table_name
GROUP BY `code`, `element_id`
ORDER BY maxID desc) abc
GROUP BY `code`
因为 table 我有很多数据。这是一个样本。
这里可以看的更清楚:
我需要结果:
11-1011.00 1.B.1.b 2.00
11-1012.00 1.B.1.c 7.00
这个结果是没有 where 子句的。
如果使用 where 子句,我只想要一个与我拥有的 element_id(1.B.1.b) 匹配的结果:
11-1011.00 1.B.1.b 2.00
因此,您想要按 code
和 element_id
分组,并且 select 最大 data_value
。这可以通过以下方式实现。
SELECT
code,
element_id,
max(data_value) AS data_value
FROM table_name
GROUP BY
code,
element_id
现在,如果 table_name
中有更多列,您需要将前一个查询作为子查询,加入 table_name
,然后 select 你想要的列。
SELECT table_name.*
FROM (
SELECT
code,
element_id,
max(data_value) AS data_value
FROM table_name
GROUP BY
code,
element_id
) AS max_record
INNER JOIN table_name
ON table_name.code = max_record.code
AND table_name.element_id = max_record.element_id
AND table_name.data_value = max_record.data_value
您可以通过
实现
SELECT a.code, max( a.maxID ) , a.element_id
FROM (
SELECT *
FROM (
SELECT max(data_value) AS maxID, code , element_id
FROM table_name
GROUP BY code , element_id
ORDER BY maxID DESC
) AS abc
GROUP BY code
) AS a
WHERE a.element_id = '1.B.1.b'
GROUP BY a.code
ORDER BY a.code
或者试试这个
SELECT a.code, a.element_id, a.data_value
FROM interests a
INNER JOIN (
SELECT code, max( data_value ) data_value
FROM table_name
GROUP BY code
)b ON a.code = b.code
AND a.data_value = b.data_value
WHERE a.element_id = '1.B.1.b'
ORDER BY a.code
如何根据一列的最大值将 MySQL 中的行 select 行分组,并将其他两列分组?查询需要按code分组,group by element_id with where clause (element_id=1.B.1.b) and max(data_value).
code element_id data_value
11-1011.00 1.B.1.a 1.33
11-1011.00 1.B.1.b 2.00
11-1012.00 1.B.1.a 2.67
11-1012.00 1.B.1.b 3.67
11-1012.00 1.B.1.C 7.00
我试过这个:
SELECT * FROM (select
max(`data_value`) as maxID, `code`, `element_id`
from
table_name
GROUP BY `code`, `element_id`
ORDER BY maxID desc) abc
GROUP BY `code`
因为 table 我有很多数据。这是一个样本。
这里可以看的更清楚:
我需要结果:
11-1011.00 1.B.1.b 2.00
11-1012.00 1.B.1.c 7.00
这个结果是没有 where 子句的。
如果使用 where 子句,我只想要一个与我拥有的 element_id(1.B.1.b) 匹配的结果:
11-1011.00 1.B.1.b 2.00
因此,您想要按 code
和 element_id
分组,并且 select 最大 data_value
。这可以通过以下方式实现。
SELECT
code,
element_id,
max(data_value) AS data_value
FROM table_name
GROUP BY
code,
element_id
现在,如果 table_name
中有更多列,您需要将前一个查询作为子查询,加入 table_name
,然后 select 你想要的列。
SELECT table_name.*
FROM (
SELECT
code,
element_id,
max(data_value) AS data_value
FROM table_name
GROUP BY
code,
element_id
) AS max_record
INNER JOIN table_name
ON table_name.code = max_record.code
AND table_name.element_id = max_record.element_id
AND table_name.data_value = max_record.data_value
您可以通过
实现SELECT a.code, max( a.maxID ) , a.element_id
FROM (
SELECT *
FROM (
SELECT max(data_value) AS maxID, code , element_id
FROM table_name
GROUP BY code , element_id
ORDER BY maxID DESC
) AS abc
GROUP BY code
) AS a
WHERE a.element_id = '1.B.1.b'
GROUP BY a.code
ORDER BY a.code
或者试试这个
SELECT a.code, a.element_id, a.data_value
FROM interests a
INNER JOIN (
SELECT code, max( data_value ) data_value
FROM table_name
GROUP BY code
)b ON a.code = b.code
AND a.data_value = b.data_value
WHERE a.element_id = '1.B.1.b'
ORDER BY a.code