爲了提高性能,我需要一個sql來實現以下要求。oracle sql爲了獲得最小時間戳結果的次數大於
如果有一個表,下面幾列:
id timestamp value
我怎樣才能得到最小的時間戳(例如:T1)的結果> 100000當計數?
那麼下面的SQL結果 - COUNT(*)會> 100000
select count(*) from table where timestamp < :t1
爲了提高性能,我需要一個sql來實現以下要求。oracle sql爲了獲得最小時間戳結果的次數大於
如果有一個表,下面幾列:
id timestamp value
我怎樣才能得到最小的時間戳(例如:T1)的結果> 100000當計數?
那麼下面的SQL結果 - COUNT(*)會> 100000
select count(*) from table where timestamp < :t1
我你的問題的認識:在表格中找到最早有至少100,000行的時間戳記。
可能有很多方法可以做到這一點;主要困難在於試圖提出一個有效的。
我認爲分析函數法最可能奏效。最明顯的選擇是使用COUNT:
select min(timestamp) from (
select timestamp, count(*) over (order by timestamp rows between unbounded preceding and 1 preceding) earlier_rows
from table
)
where earlier_rows >= 100000
,但我懷疑使用RANK或類似的東西會更快:
select min(timestamp) from (
select timestamp, rank() over (order by timestamp) time_rank
from table
)
where time_rank > 100000
我不知道把我的頭頂部,但這些可能如果存在重複的時間戳,則結果略有不同。
這會給你最小和最大值和計數
select
count(t.*),
min(t.timestamp),
max(t.timestamp)
from table t
where (select count(*) from table t where t.timestamp < :t1) > 10000
不回答問題,條件> 100000缺失 – fudy
「WHERE」子句中不允許使用聚合函數。 –
是試圖快速並將查詢的第一部分複製到哪裏。這將運行查詢兩次,但它會獲取where語句的所有記錄,並再次查詢實際查詢,認爲最好是像下面那樣運行查詢,並在查詢中運行查詢結果時檢查結果檢查其超過10000 選擇 計數, 分鐘(t.timestamp), MAX(t.timestamp) 從表T t.timestamp <(T *):T1 – Shaun07776
是的,這就是我想要的,謝謝 – fudy
但查詢需要我6秒 – fudy