分别在多个列中查找分钟

时间:2019-03-20 18:03:12

标签: mysql

我的直觉告诉我,已经有一个答案,但我找不到答案,至少对于来说。如果我错了,请纠正我,我将删除此帖子。

我有一个以ID作为主键的表,三个数字列(分别称为A,B,C)和四个列(分别称为W,X,Y,Z)需要分组。

对于每个组,将有一个(多个)ID,其中A最低,B最低,C最低。因此,这不是“从多个列中获取最低”,我需要首先计算出每个组的A的最小值,然后从ID的范围中减去每个B的范围,从而得出A的最小值,然后从中获取C的最小值。 B的最小值之后剩下的选项。然后,获取与每个分组的组合相关的ID(只有一个)。例如

| ID | A | B | C | W | X | Y | Z | 
----------------------------------
| 1  | 2 | 5 | 5 | D | E | F | G | <-- first group
| 2  | 1 | 5 | 4 | D | E | F | G | 
| 3  | 1 | 5 | 3 | D | E | F | G |
| 4  | 1 | 2 | 4 | H | I | J | K | <-- second group
| 5  | 2 | 5 | 4 | H | I | J | K |

预期输出:

| ID | A | B | C | W | X | Y | Z | 
----------------------------------

| 3  | 1 | 5 | 3 | D | E | F | G | <-- first group min
| 4  | 1 | 2 | 4 | H | I | J | K | <-- second group min

我想尝试进行三个单独的查询以获取每个最小值,然后将其加入每个组列中,但是每个组得到一个以上的结果。我也尝试过子查询,但我猜它是同样的问题:

select ID, A
from tbl
where A= (select min(A) from tbl as m where m.W= tbl.W
.... and so on

很高兴自己阅读并解决此问题,如果有人可以提供链接,因为我的Google-Fu让我失望了。

1 个答案:

答案 0 :(得分:0)

我尝试了几种方法,以下是其中的有效方法:

select id,A,B,C,W,X,Y,Z from
(select * from `table` inner join 
(SELECT min(A) as U,min(B) as I,min(C) as O,W as `G`,X as `H`,Y as `J`,Z as `K` FROM `table`
group by G,H,J,K) as temp on temp.U=`table`.A and temp.I=`table`.B and temp.O=`table`.C) as temp2

我知道这有点混乱,但是可以达到预期的效果。

相关问题