2

这是我的场景的描述:

我的表

ID name width1 width2 parameter1 parameter2 code
1  AAA  0      10     500        750        10001
2  AAA  0      10     750        1250       10002 
3  AAA  0      10     900        1400       10003
4  AAA  0      10     1150       1650       10004
.................................................
.................................................
.................................................

可以说我正在处理一些具有自己属性的“主题”。基于主题属性和一些具有相同属性的计算,我应该从这个表中获取“代码”。

因此,我目前正在使用的这个主题具有名称:AAA,宽度:5,并且通过我的计算,我得到了参数:1000。在我拥有所有必要的属性后,我可以将它们与 myTable 中的行进行比较。为了更大的图景,我将从该表中选择所有内容,但我的目标是获取代码。这是查询:

SELECT * FROM myTable WHERE name="AAA" AND 5>=width1 AND 5<=width2 AND 1000>=parameter1 AND 1000<=parameter2

在此之后,我得到这两行:

ID name width1 width2 parameter1 parameter2 code
2  AAA  0      10     750        1250       10002 
3  AAA  0      10     900        1400       10003

顺便提一下,这里可能是一排。但是,如果我得到两行,我需要做以下事情。我的全部注意力都集中在这些参数上,我正在比较第一行中我的参数和参数 2 之间的分布以及第二行中我的参数和参数 1 之间的分布。

parameter -> parameter2
1250 - 1000 = 250
&
parameter1 -> parameter
1000 - 900 = 100

因此,如果 spread1:250 > spread2:100 采用 code2:00002 否则采用 code3:00003。

我的问题是,如何比较不同行和列的值?如您所见,我有两行和来自不同列的值。我需要的是一种选择这些特定值进行比较的方法。

谢谢你。

4

1 回答 1

2

它似乎是由 Greatest from Least 解决的,所以首先我们得到最小的值并排序这个下降。

SELECT 
  code
FROM 
  myTable 
WHERE 
  name="AAA" 
AND 
  5 >= width1 
AND 
  5 <= width2 
AND 
  1000 >= parameter1 
AND 
  1000 <= parameter2
ORDER BY 
  Least( parameter2-1000, 1000-parameter1 ) desc
LIMIT 1;

SQL小提琴

于 2012-11-10T10:24:30.423 回答