我有一张桌子,我有
Field1 | Field2 | Field3 |低|高
我不关心Field3的细分,所以希望最终得到每个Field 1的一条记录字段2设置为:
Field1 | Field2 |低|高
(因为我不关心Field 3突破)
最终得到例如
所以我认为我可以做到
Create table LOW_HIGH_ALL as (select ID, FIeld1, FIeld2, max(High), min(Low) from LOW_HIGH group by Field1, Field2
正如您所看到的,每个Field 1代表Field B字段中与另一个不重叠的范围。
问题是存在一些“不良数据”,所以有时我最终得到:
即。坏Min数据。我不能只假设1总是坏的。所以我想如果我可以接近最低,我可以得到
并且可以使用'Min-1'和Min之间的差异来确定何时我有错误的最小数据(并且可以使用第二个值,到目前为止,它似乎偶尔只是一个糟糕的最小数据。
我曾尝试过做不起作用的Min-1,因此想知道是否有其他方法来提取第二低的值。
答案 0 :(得分:1)
第二低是有点痛。但是,您可以使用substring_index()
/ group_concat()
技巧在MySQL中执行此操作:
Create table LOW_HIGH_ALL as
select ID, FIeld1, FIeld2, max(High), min(Low),
substring_index(substring_index(group_concat(distinct low order by low asc), ',', 2), ',', -1) as min_2
from LOW_HIGH
group by Field1, Field2;
这将连接"低"将值组合在一起,然后从结果字符串中提取第二个。