目前,我有一个PostgreSQL数据库(和一个结构几乎相同的SQL Server数据库)以及一些数据,如下例所示:如何在点之间的最大距离中找到最小值和最大值(SQL)
+----+---------+-----+
| ID | Name | Val |
+----+---------+-----+
| 01 | Point A | 0 |
| 02 | Point B | 050 |
| 03 | Point C | 075 |
| 04 | Point D | 100 |
| 05 | Point E | 200 |
| 06 | Point F | 220 |
| 07 | Point G | 310 |
| 08 | Point H | 350 |
| 09 | Point I | 420 |
| 10 | Point J | 550 |
+----+---------+-----+
ID = PK (auto increment);
Name = unique;
Val = unique;
现在,假设我只有Point F (220)
,我想找到的最低值和最大的价值与数据之间的最大距离小于100。
所以,我的结果必须返回:
- 最低:点E(200)
- 最大:点I(420)
一步解释步骤(和因为英语不是我的主要语言):
寻找最低值:
Initial value = Point F (220); Look for the lower closest value of Point F (220): Point E (200); 200(E) < 220(F) = True; 220(F) - 200(E) < 100 = True; Lowest value until now = Point E (200) Repeat Look for the lower closest value of Point E (200): Point D (100); 100(D) < 200(E) = True; 200(E) - 100(D) < 100 = False; Lowest value = Point E (200); Break;
展望FOT最大的价值:
Initial value = Point F (220); Look for the biggest closest value of Point F (220): Point G (310); 310(G) > 220(F) = True; 310(G) - 220(F) < 100 = True; Biggest value until now = Point G (310) Repeat Look for the biggest closest value of Point G (310): Point H (350); 350(H) > 310(G) = True; 350(H) - 310(G) < 100 = True; Biggest value until now = Point H (350) Repeat Look for the biggest closest value of Point H (350): Point I (420); 420(I) > 350(H) = True; 420(I) - 350(H) < 100 = True; Biggest value until now = Point I (420) Repeat Look for the biggest closest value of Point I (420): Point J (550); 550(J) > 420(I) = True; 550(J) - 420(I) < 100 = False; Biggest value Point I (420); Break;
您如何识别您的“初始值”?你是否有它的价值('Val',在你的例子中是'220'),它的'ID'(在你的例子中是'06')还是它的名字(OFC,只有它是唯一的)? – pozs
“ID”是一个自动增量编号。 'Val'是独一无二的,'name'也是独一无二的!我最初只有'ID'。 –
从你对已删除答案的评论(* t在F点与最小值和最大值之间的间隔不小于100,它在上一点和下一点*之间),在我看来这是一个特殊的[标签:间隙 - 和问题。 – pozs