2013-03-26 36 views
1

我有什麼這個數據意味着這樣SQL找到其間的值

 
A  B 
----------- 
1.2  2.3 
2.3  3.9 
3.9  4.34 
4.34 5.786 

一個表是1.2-5.786是一些表的長度和 1.2-2.3具有一定的屬性 2.3-3.9有一些屬性等等......但是當你認爲它是整個表格的長度時(例如這裏)就是1.2 - 5.786。

我想運行一個查詢,這將使我的兩個值之間的行:例如:

A = 1.1的AMD B = 4.234

我有很難弄清楚如何編寫一個查詢,我寫的大部分查詢都會留下一些邊緣案例。

+0

如果'A = 1.1和B = 4.234',你期待什麼樣的答案? – 2013-03-26 23:02:52

+0

我想獲得所有的行之間的這些值,如當我想要的前三行a = 1.3和b = 4.234。因爲a = 1.3在第一行的1.2和2.3之間,並且b = 4.234在第三行的3.9和4.34之間。所以我想要結果集中的前三行。 – 2013-03-26 23:06:57

+0

給定範圍(1.1,4.234),您希望查找範圍與給定範圍重疊的表中的所有值。主要棘手的部分是「在正確的道路上分支」,但你有一個可行的答案。另請參閱:[確定兩個日期範圍是否重疊](http://stackoverflow.com/questions/325933/determine-whether-two-date-ranges-overlap/);該邏輯適用於任何範圍,而不僅僅是日期範圍。 – 2013-03-26 23:52:01

回答

1

這似乎很好地工作:

select * 
from yourtable 
where (b > 1.1 and a <= 4.234) 

SQL Fiddle Demo

基本上確保b在上述下限更大並且a小於或等於上部彈簧d。根據您的預期結果,您可能需要將b >更改爲b >=

+0

謝謝。這很好。 – 2013-03-26 23:34:37

+0

@SumanKumar - np,很高興能幫到你! – sgeddes 2013-03-26 23:36:45

0

例如,如果你想A =1.1 amd B = 4.234之間的值,則輸出

A  B 

1.2   2.3 

2.3   3.9 

則該查詢:

SELECT * from my_table WHERE A>=1.1 AND B<=4.234 

但如果你想輸出

A  B 

1.2   2.3 

2.3   3.9 

3.9   4.34 

然後你想查詢

SELECT * FROM my_table WHERE A >= 1.1 AND A < 4.234 B > 4.234 
+0

如果a = 1.3,那麼A> = 1.3將跳過第一行,但1.3在1.2和2.3之間,即第一行。 – 2013-03-26 23:28:15

+0

然後你的問題就很難定義。 – 2013-03-26 23:30:14

0

這聽起來像你想

SELECT a, b 
    FROM my_table 
    WHERE A >= 1.1 AND B <= 4.234 
    OR A >= 1.1 AND A < 4.234 
    OR B > 1.1 AND B <= 4.234 

這是假定總是<乙