写一个查询来计算年龄直到日期,并从员工表中找到第n个最高年龄

时间:2017-09-25 04:13:06

标签: sql oracle

ID       || birthdate
------------------------ 
1        || 25-10-1994
2        || 1-6-1990
3        || 4-12-2006

如何计算年龄以及如何获得第n个最高年龄。

3 个答案:

答案 0 :(得分:1)

months_betweenrow_number一样使用

select m.age from 
    (select s.age, 
            ROW_NUMBER() OVER (PARTITION BY s.age ORDER BY s.age desc) rownumber  
       from (select MONTHS_BETWEEN(sysdate, birthdate )/12 age from myTable) s) m
where m.rownumber = 1 -- or your nth highest age row, for example 11 ))

答案 1 :(得分:0)

我不知道SQL查询的Oracle语法,但您可以按如下方式创建查询:

  1. 按升序对日期列进行排序。
  2. 将结果限制设为1&偏移到N,即第N个最大。
  3. 使用select打印从当前日期减去的日期列以获得当前年龄。

答案 2 :(得分:0)

可以通过从sysdate中减去birtdate来计算年龄。这将以天为单位返回年龄。完成后,这是一个典型的查询。你可以用例如一个窗口函数来过滤掉最老的n:

select id, birthdate, "Age in days"
from (
  select id,
         birthdate, 
         sysdate - birthdate as "Age in days",
         row_number() over (order by sysdate - birthdate desc) as rn
  from emps
) 
where rn <= 2 -- or whatever limit you want
order by 3;