相關從第二表值我有以下兩個表在我的數據庫:查找而不訴諸PL/SQL
a)含在某一特定日期(你可能會覺得這些端口,比如獲取的值表,溫度讀數):
sensor_id | acquired | value
----------+---------------------+--------
1 | 2009-04-01 10:00:00 | 20
1 | 2009-04-01 10:01:00 | 21
1 | 2009-04 01 10:02:00 | 20
1 | 2009-04 01 10:09:00 | 20
1 | 2009-04 01 10:11:00 | 25
1 | 2009-04 01 10:15:00 | 30
...
讀數間隔可能不同,但組合(
sensor_id
,acquired
)是唯一的。
b)含有時段和一個描述的第二個表(你可能認爲這些作爲,比方說,週期當有人接通的散熱器):
sensor_id | start_date | end_date | description
----------+---------------------+---------------------+------------------
1 | 2009-04-01 10:00:00 | 2009-04-01 10:02:00 | some description
1 | 2009-04-01 10:10:00 | 2009-04-01 10:14:00 | something else
同樣,段的長度可能會有所不同,但將從來沒有任何給定傳感器重疊的時間段。
我想要得到的結果,看起來像這樣的任何傳感器和任何日期範圍:
sensor id | start date | v1 | end date | v2 | description
----------+---------------------+----+---------------------+----+------------------
1 | 2009-04-01 10:00:00 | 20 | 2009-04-01 10:02:00 | 20 | some description
1 | 2009-04-01 10:10:00 | 25 | 2009-04-01 10:14:00 | 30 | some description
或文本從:給出一個
sensor_id
和日期範圍的range_start
和range_end
, 發現我所有的時間與日期範圍(即start_date < range_end
和end_date > range_start
)重疊的週期以及這些行中的每一行,查找時間段爲start_date
和end_date
(查找第一行acquired > start_date
和acquired > end_date
)的值表中的對應值。
如果不是start_value
和end_value
列,這將成爲如何連接兩個表的教科書簡單示例。
我可以以某種方式在一個SQL語句中獲得所需的輸出,而不訴諸編寫PL/SQL函數來查找這些值嗎?
除非我忽略了一些明顯的東西,否則這不能用簡單的子選擇來完成。
數據庫是Oracle 11g,因此任何Oracle特定的功能都是可以接受的。
編輯:是的,循環是可能的,但我想知道這是否可以用一個SQL選擇完成。
我的錯誤,我沒有澄清我試圖找到一種方法來在一個SQL查詢中執行此操作。否則,是的,你的想法是非常有效的,也是實現這一點最直接的方法。 – andri 2009-04-07 18:56:58
我明白你只想要一個查詢。您可以將所有內容放在一個巨大的查詢中。不好,但可能。 – 2009-04-07 19:05:22