A B C
+--------+-------+----+
| 310 | 09001 | 18 |
| 80614 | 09001 | 18 |
| 169009 | 09001 | 19 |
| 201695 | 09001 | 19 |
| 282089 | 09001 | 19 |
| 320438 | 09001 | 19 |
| 131733 | 09001 | 19 |
| 387427 | 09001 | 19 |
| 404201 | 09001 | 19 |
| 525449 | 09001 | 19 |
| 605542 | 09001 | 19 |
| 710740 | 09001 | 18 |
| 746380 | 09001 | 19 |
| 867492 | 09001 | 19 |
| 864637 | 09005 | 18 |
| 710741 | 09005 | 17 |
| 746375 | 09005 | 18 |
| 556470 | 09005 | 18 |
| 604258 | 09005 | 18 |
| 401597 | 09005 | 18 |
| 141331 | 09005 | 18 |
| 336054 | 09005 | 18 |
| 387423 | 09005 | 18 |
| 203706 | 09005 | 18 |
| 278651 | 09005 | 18 |
| 126352 | 09005 | 18 |
| 312 | 09005 | 17 |
| 74627 | 09005 | 17 |
+--------+-------+----+
不确定如何标题,但这是场景。我希望在B列中为每个不同的值显示1行,这是C列中的最高值,而A列中的最低值。
例如,09001就是这样 169009 09001 19,对于09005,它将显示126352 09005 18
因此,基本上C列的最大值按列B分组,而这些行的列A中的最低值。
提前致谢
SELECT MIN(A)AS MaxA,B,MAX(C)AS MinC 从表 GROUP BY B
给出
310 09001 19
312 09005 18
不是
131733 09001 19
141331 09005 18
这就是我需要的
select min(A), B, C
from my_table
where ( C) in (
select max(C)
from my_table
where B in (09001,09005) group by B)
and B in (09001,09005)
group by B, C
结果
310 09001 18
126352 09005 18
131733 09001 19
但09001应该只有一个结果
Select min A,B
from my_table
where C in (select max(c)
from my table
where A
in (09001,
09005)group by A)
and fips in (09001,
09005)
group by A
最终工作,虽然它只显示A和B,但我需要的只是A这个例子。我确定还有其他方法可以让C显示出来。
感谢帮助人员
答案 0 :(得分:1)
我认为你已经解决了自己的问题。
SELECT MIN(A) AS MaxA, B, MAX(C) AS MinC
FROM Table
GROUP BY B
除非我在那里犯了某种愚蠢的错误。
编辑:我现在更了解这些要求。试一试。
WITH T1 AS (
SELECT B, MAX(C) AS MaxC
FROM Table
GROUP BY B
), T2 AS (
SELECT MIN(A) AS MinA, MaxC
FROM T1
GROUP BY MaxC)
SELECT T2.MinA AS A, T1.B, T1.MaxC AS C
FROM T1
INNER JOIN T2
ON T1.MaxC = T2.MaxC
答案 1 :(得分:0)
你可能需要最小值超过B
select min(A), B, C
from my_table
where ( B, C ) in (
select B, max(C)
from my_table
group by B
)
group by B,C