答案 0 :(得分:2)
使用窗口功能:
select t.*
from (select t.*,
row_number() over (partition by beam_num order by b desc) as seqnum
from t
) t
where seqnum = 1;
答案 1 :(得分:1)
您不应该发布图片文字就可以了 在mysql 5.x中,没有窗口函数。
您必须检查的A,B,C D的聚集函数,如果B大于或等于2,则需要此值。
SELECT
t1.`Beam_Num`, MAX(`A`), MAX(`B`), MAX(`C`), MAX(`D`)
FROM
table1 t1
INNER JOIN
(SELECT
MAX(B) maxb, Beam_Num
FROM
table1
GROUP BY Beam_Num) t2 ON t1.Beam_Num = t2.Beam_Num
AND t1.B = t2.maxb
GROUP BY t1.Beam_Num;
模式(MySQL v5.7)
CREATE TABLE table1
(`Beam_Num` int, `A` NUMERIC, `B` NUMERIC, `C` NUMERIC, `D` numeric)
;
INSERT INTO table1
(`Beam_Num`, `A`, `B`, `C`, `D`)
VALUES
(10, 4760.0, 491190.0, 223.0, 0.482),
(10, 4760.0, 528769.0, 205.0, 0.444),
(1000, 1941.0, 143560.0, -56.0, 0.2),
(1000, 1941.0, 113815.0, -19.0, 0.15),
(1001, 2695.0, 115663.0, 95.0, 0.56),
(1003, 2250.0, 473762.0, 96.0, 0.555),
(1003, 2250.0, 474130.0, 185.0, 0.555),
(1005, 11861.0, 457673.0, -1056.0, 0.333),
(1008, 948.0, 20471.0, 77.0, 0.5),
(1008, 948.0, 102978.0, 92.0, 0.375),
(1009, 3308.0, 250528.0, 261.0, 0.715)
;
查询#1
SELECT
t1.`Beam_Num`, MAX(`A`), MAX(`B`), MAX(`C`), MAX(`D`)
FROm
table1 t1
INNER JOIN
(SELECT MAX(B) maxb,Beam_Num FROM table1 GROUP BY Beam_Num) t2
ON t1.Beam_Num =
t2.Beam_Num AND t1.B = t2.maxb
GROUP BY t1.Beam_Num;
| Beam_Num | MAX(`A`) | MAX(`B`) | MAX(`C`) | MAX(`D`) |
| -------- | -------- | -------- | -------- | -------- |
| 10 | 4760 | 528769 | 205 | 0 |
| 1000 | 1941 | 143560 | -56 | 0 |
| 1001 | 2695 | 115663 | 95 | 1 |
| 1003 | 2250 | 474130 | 185 | 1 |
| 1005 | 11861 | 457673 | -1056 | 0 |
| 1008 | 948 | 102978 | 92 | 0 |
| 1009 | 3308 | 250528 | 261 | 1 |
答案 2 :(得分:0)
只需使用MAX
聚合函数和GROUP BY
子句运行查询,如下所示:
SELECT Beam_Num, A, MAX(B), C, D
FROM table_name
GROUP BY Beam_Num;
用要在其上运行查询的表的名称替换table_name
。