我正在上主要有以下模式現在的SELECT語句子查詢有兩個條件
Col 1 = TIMESTAMP
Col 2 = PATIENTID
Col 3 = ECGVALUE
一個心電數據,我試着寫,應該是能夠選擇的所有SQL語句滿足以下條件
Row index >= n and TIMESTAMP of xth row <= TIMESTAMP of nth row + offset
爲了進一步explaing它的行,讓我們說我在我的數據庫以下數據
1.1 ANON 1.1
1.3 ANON 2.3
3.5 ANON 4.3
5.0 ANON 6.5
6.3 ANON 7.5
7.9 ANON 8
8.6 ANON 9.4
現在,我要選擇從第3行中的數據,直到數據3秒已經收集了,這意味着我的結果集應該有
3.5 ANON 2.3 *//3rd row till TIMESTAMP <= 3.5 + 3 <= 6.5*
1.3 ANON 2.3
3.5 ANON 4.3
5.0 ANON 6.5
6.3 ANON 7.5
最後兩行被忽略作爲第一個和最後一個cannont的TIMESTAMP之間的差異超越3.所以,如果我回到我的條件,這是
Row index >= n and TIMESTAMP of xth row <= TIMESTAMP of nth row + offset
這裏,
n: nth row from where data must be selected
x: Any arbitary row in result set
offset: Maximum difference between first and last TIMESTAMP of result set.
我寫了一個工作的SQL語句上面的條件,但我認爲它沒有太多優化,因爲我是SQL新手。
SELECT TIMESTAMP, ECGVALUE
FROM
(
SELECT TIMESTAMP, ECGVALUE, ROW_NUMBER() OVER() AS RN
FROM EKLUND.DEV_RAWECG
)
WHERE RN >= n AND TIMESTAMP <=
(
SELECT TIMESTAMP FROM
(
SELECT TIMESTAMP, ROW_NUMBER() OVER() AS TM
)
WHERE TM = n
) + offset;
您是否知道,除非用'ORDER明確指定行的順序不能保證BY' ? –
你確定?數據庫中的數據已經按ASC順序排序。 – Shivam
我們正在討論查詢返回的數據順序,而不是物理存儲在數據庫中的數據順序。無論後者如何,它對前者沒有100%的影響。這些行可以並行檢索,並且爲了表現,引擎將在沒有ORDER BY的情況下從所獲得的塊中生成結果集而不關注它們的特定順序。 –