【问题标题】:Can I use Min-1 to find the next to lowest value?我可以使用 Min-1 找到下一个最低值吗?
【发布时间】:2014-03-15 23:07:45
【问题描述】:

我有一张桌子

字段1 |字段2 |字段3 |低 |高

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

字段1 |字段2 |低|高

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

并以 e.g 结尾

  • 苹果 |白色 | 1 | 100
  • 香蕉 |白色 | 101 | 400
  • 猕猴桃 |白色 | 402 | 750
  • 香蕉 |黑色 | 1 | 85
  • 苹果 |黑色 | 90 | 205
  • 猕猴桃 |黑色 | 210 | 5504 等等

所以我想我可以做到

Create table LOW_HIGH_ALL as (select ID, FIeld1, FIeld2, max(High), min(Low) from LOW_HIGH group by Field1, Field2

如您所见,每个字段 1 都代表字段 B 字段中不重叠的范围。

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

  • 苹果 |白色 | 1 | 100
  • 香蕉 |白色 | 1 | 400
  • 猕猴桃 |白色 | 1 | 750

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

  • 苹果 |白色 | 1 | 4 | 100
  • 香蕉|白色 | 1 | 101 | 400
  • 猕猴桃 |白色 | 1 | 401 | 700

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

我尝试做 Min-1 不起作用,所以想知道是否有其他方法可以提取第二低的值。

【问题讨论】:

  • 第二高?第二低?
  • 第二低,我的错,已更正,感谢您的敏锐眼光

标签: mysql max min


【解决方案1】:

第二低有点痛苦。但是,您可以在 MySQL 中使用 substring_index()/group_concat() 技巧:

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;

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

【讨论】:

  • 谢谢。现在尝试,运行没有错误,这始终是一个好兆头,数百万记录表,因此将报告有希望的好消息。
  • 感谢它完美运行。在第一次运行时,我在许多记录中的 SecondLow 与 Low 相同,经过审查,Field1 | 的记录有 # of字段2 | 1 | 1 所以我只是将 group by 更改为 FIeld1、Field2、Low、High,它就像一个魅力。谢谢,对 mysql 功能的深入了解。
  • @MarkH 。 . .另一种方法是在group_concat() 中添加distinct 关键字:group_concat(distinct low order by low asc)
  • 我要尝试一下,在审查我的小组后,我刚刚给出了我开始的确切信息,即每个字段范围 1 |字段 2 |低 |基于字段 3 的高(我试图获得一个具有整个范围和第二个值的记录)。
猜你喜欢
  • 2011-04-22
  • 2013-01-08
  • 1970-01-01
  • 1970-01-01
  • 2021-09-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-23
相关资源
最近更新 更多