1

假设我有一个 sql 表:带有记录的 table1 如下所示:

id1    id2     status    value
A     A123     VN        1
A     A234     AB        2
B     B123     VN        3
B     B321     AB        4
C     C324     AB        5

我想获取状态为 VN 的 id1、id2 以及共享相同 id1 的那些记录的最大值。

在这种情况下,输出应如下所示

id1    id2     status    value
A     A123     VN        2
B     B123     VN        4

我不太确定如何编写查询,任何帮助将不胜感激!

这是我到目前为止所做的。

select
    test1.*
from test1 
inner join
(select 
    part_id 
from table1
where status = 'VN') a
on test1.id1 = a.id1;

我可以得到这个,但我不知道如何正确地做组和最大值(值):

id1    id2     status    value
A     A123     VN        1
A     A234     AB        2
B     B123     VN        3
B     B321     AB        4
4

2 回答 2

4

一种简单的方法是使用相关子查询来获取最大值;

SELECT id1, id2, status, 
  (SELECT MAX(value) FROM test1 t2 WHERE t1.id1 = t2.id1) value 
FROM test1 t1
WHERE status = 'VN'

一个用于测试的 SQLfiddle

于 2013-09-16T20:48:36.770 回答
0

这个问题不清楚,但我认为这会对你有所帮助。

SELECT T1.id1, T1.id2, T1.status, T2.value
FROM tbl T1
JOIN
(SELECT id1, MAX(value) value FROM tbl GROUP BY id1) T2
ON T1.id1 = T2.id1
WHERE status = 'VN'
于 2013-09-16T20:47:16.560 回答