我有一個數據庫中證券價格的數據集。該數據的結構是這樣的:基於2條件的SQL匹配行
id security_id time_to_maturity price
001 01 1.5 100.45
002 01 1.3 101.45
003 01 1.1 102.45
004 01 1.02 101.45
005 01 1.0 101.45
006 03 22.3 94.45
007 03 22.1 96.45
008 03 21.8 98.45
009 05 4.2 111.45
010 05 4.1 112.45
011 05 3.8 111.45
...
id是row_id
和security_id
是每個安全的ID。我試圖從每個安全性的特定時間範圍獲取數據。首先,我運行一個查詢查找每個安全ID的最小值和最大值,然後找到最小和最大和最後的區別找到一個值,該值大於最小像這樣10%以上的是:
SELECT security_id, MIN(time_to_maturity), MAX(time_to_maturity),
MAX(time_to_maturity) - MIN(time_to_maturity) tDiff,
((MAX(time_to_maturity) - MIN(time_to_maturity)) * .1) + MIN(time_to_maturity)
FROM db1
group by security_id
order by security_id
這使我下面的:
security_id min() max() diff min+(diff*.1)
01 1.0 1.5 .5 1.05
03 21.8 22.3 .5 21.85
05 3.8 4.2 .4 3.84
最後,我想要做的是從主數據集只有那些行每個security_id
在time_to_maturity is < min+(diff*.1)
選擇。
我不知道如何構造它,因爲我覺得我需要一個循環來通過security_id子集數據,然後通過time_to_maturity is < min+(diff*.1)
。
答案會是這個樣子:
id security_id time_to_maturity price
004 01 1.02 101.45
005 01 1.0 101.45
008 03 21.8 98.45
011 05 3.8 111.45
有什麼建議?
是您的關於MySQL的問題,或有關SQL Server?他們不是一回事。 – 2012-03-31 03:24:12