Mysql SQL从按唯一值分组的行中选择数据
我有一张像这样的桌子:Mysql SQL从按唯一值分组的行中选择数据,mysql,sql,Mysql,Sql,我有一张像这样的桌子: from |to|quani A1 |A2|200 B1 |B2|200 C1 |C2|210 D1 |D2|210 E1 |E2|220 F1 |F2|220 G1 |G2|220 H1 |H2|200 J1 |J2|200 我需要一个查询或脚本来获得如下内容: from|to|quani A1 |B2|200 C1 |D2|210 E1 |G2|220 H1 |J2|200 如果我使用GR
from |to|quani
A1 |A2|200
B1 |B2|200
C1 |C2|210
D1 |D2|210
E1 |E2|220
F1 |F2|220
G1 |G2|220
H1 |H2|200
J1 |J2|200
我需要一个查询或脚本来获得如下内容:
from|to|quani
A1 |B2|200
C1 |D2|210
E1 |G2|220
H1 |J2|200
如果我使用GROUP BY quani,它会选择
from|to|quani
A1 |A2|200
C1 |C2|210
E1 |E2|220
尝试以下查询:
select min(temp.from_) as from_,
max(temp.to_) as to_,
temp.quani as quani
from
(SELECT t.*,
(case when @prev = quani
then @rowid
else @rowid:=@rowid+1
end
) as rowid,
@prev:= quani as prev
FROM t, (SELECT @rowid:=0,@prev:=1) as init
ORDER BY from_) as temp
group by temp.quani,temp.rowid;
尝试以下查询:
select min(temp.from_) as from_,
max(temp.to_) as to_,
temp.quani as quani
from
(SELECT t.*,
(case when @prev = quani
then @rowid
else @rowid:=@rowid+1
end
) as rowid,
@prev:= quani as prev
FROM t, (SELECT @rowid:=0,@prev:=1) as init
ORDER BY from_) as temp
group by temp.quani,temp.rowid;
似乎您需要按quani分组的值的最小值
select min(from), min(to), quani
from my_table
group by quani
似乎您需要按quani分组的值的最小值
select min(from), min(to), quani
from my_table
group by quani
假设您可以按第一列排序,那么您需要quani更改的行。一种方法使用变量。下面是使用相关子查询的另一种方法:
select t.*,
(select t2.to
from t t2
where t2.to < t.to
order by t2.to desc
limit 1
) as prev_to
from t
having prev_to is null or prev_to <> to;
注:
在较大的表上,性能不会很好,但在索引上,quani可以提供帮助。
to和from是SQL关键字,因此它们是非常糟糕的列名称。
have-without-aggregation是一个MySQL扩展,它允许在不使用子查询的情况下按列别名进行过滤。
条件也可以写为where not prev_to to,但是空安全运算符不太熟悉。
假设您可以按第一列排序,那么您需要quani更改的行。一种方法使用变量。下面是使用相关子查询的另一种方法:
select t.*,
(select t2.to
from t t2
where t2.to < t.to
order by t2.to desc
limit 1
) as prev_to
from t
having prev_to is null or prev_to <> to;
注:
在较大的表上,性能不会很好,但在索引上,quani可以提供帮助。
to和from是SQL关键字,因此它们是非常糟糕的列名称。
have-without-aggregation是一个MySQL扩展,它允许在不使用子查询的情况下按列别名进行过滤。
条件也可以写为where not prev_to to,但是空安全运算符不太熟悉。
按顺序描述,你试过了吗?在最后一次编辑后,问题可能重复的地方很清楚,除了预期结果中的打字错误。无法理解为什么它会被搁置!!请不要编辑你的问题,说答案给了你答案。相反,你发现这是最有用的。@DonaldDuck根据OP,他无法将其标记为答案,因为问题已由to DESC搁置。你试过了吗?上一次编辑后,问题的可能重复内容非常清楚,除了预期结果中的一个打字错误。无法理解为什么它会被搁置!!请不要编辑你的问题,说答案给了你答案。相反,你认为这是最有帮助的。@DonaldDuck根据OP,他无法将其标记为答案,因为问题被搁置。当我将他们分组时,我松开了H1 | G2 | 200行,然后尝试用wya清楚地解释获得你所追求的结果的规则。为什么是minto?很明显,OP希望最大值为到。当我对它们进行分组时,我松开了H1 | G2 | 200行,然后尝试用一个清晰的wya解释获得您所期望的结果的规则。为什么是minto?很明显,OP希望最大值为。请尝试编辑的查询并检查演示。它应该完全符合你的要求。这正是我所需要的。非常感谢。很乐意帮忙。如果你还能做,请把它标记为答案。谢谢。不幸的是它被搁置了,我只能编辑或删除这个问题。我认为它必须保留下来,因为你的解决方案可能会对其他人有所帮助。不知道为什么它被挂起。请尝试编辑的查询并检查演示。它应该完全符合你的要求。这正是我所需要的。非常感谢。很乐意帮忙。如果你还能做,请把它标记为答案。谢谢。不幸的是它被搁置了,我只能编辑或删除这个问题。我认为它必须保留下来,因为你的解决方案可能会对其他人有所帮助。不知道为什么它被搁置了。