当计数结果大于一个数时,oracle sql获取最小时间戳

时间:2015-04-25 14:33:20

标签: sql oracle

为了提高性能,我需要一个sql来实现以下要求。

如果有表并且有以下列:

  factory :company do
    title Faker::Company.name
    image Faker::Avatar.image("my-own-slug", "200x200")
  end 

当结果计数>时,如何获得最小时间戳(例如:t1)? 100000?

然后是以下sql结果 - count(*)将> 100000

id timestamp value

2 个答案:

答案 0 :(得分:1)

我对您的问题的理解是:找到表中最早有至少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

我不确定是不是最重要的,但如果有重复的时间戳,这些结果可能略有不同。

答案 1 :(得分:0)

这将为您提供最小值和最大值以及计数

select 
    count(t.*), 
    min(t.timestamp),
    max(t.timestamp)
from table t
where ( select count(*) from table t where  t.timestamp < :t1 ) > 10000