我可以使用Min-1找到下一个最低值吗?

时间:2014-03-15 02:56:40

标签: mysql max min

我有一张桌子,我有

Field1 | Field2 | Field3 |低|高

我不关心Field3的细分,所以希望最终得到每个Field 1的一条记录字段2设置为:

Field1 | Field2 |低|高

(因为我不关心Field 3突破)

最终得到例如

  • Apple |白色| 1 | 100
  • 香蕉|白色| 101 | 400
  • Kiwi |白色| 402 | 750
  • 香蕉|黑色| 1 | 85
  • Apple |黑色| 90 | 205
  • Kiwi |黑色| 210 | 5504 等

所以我认为我可以做到

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字段中与另一个不重叠的范围。

问题是存在一些“不良数据”,所以有时我最终得到:

  • Apple |白色| 1 | 100
  • 香蕉|白色| 1 | 400
  • Kiwi |白色| 1 | 750

即。坏Min数据。我不能只假设1总是坏的。所以我想如果我可以接近最低,我可以得到

  • Apple |白色| 1 | 4 | 100
  • 香蕉|白色| 1 | 101 | 400
  • Kiwi |白色| 1 | 401 | 700

并且可以使用'Min-1'和Min之间的差异来确定何时我有错误的最小数据(并且可以使用第二个值,到目前为止,它似乎偶尔只是一个糟糕的最小数据。

我曾尝试过做不起作用的Min-1,因此想知道是否有其他方法来提取第二低的值。

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;

这将连接"低"将值组合在一起,然后从结果字符串中提取第二个。