Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 显示名称和最大年龄_Sql_Oracle_Top N - Fatal编程技术网

Sql 显示名称和最大年龄

Sql 显示名称和最大年龄,sql,oracle,top-n,Sql,Oracle,Top N,可能重复: 我应该显示数据库中最年长的人的姓名和年龄。我使用的代码显示了几个人的姓名和计算出的年龄,但它不会显示单个最年长的人。我怎样才能让它工作? 这是我的密码 select dr_drvname as "Name", trunc(max((sysdate-dr_brthdate)/365)) as "Highest AGE" from driver,dual group by dr_drvname; 试着这样做: SELECT top 1 Firstname, LastName, M

可能重复:

我应该显示数据库中最年长的人的姓名和年龄。我使用的代码显示了几个人的姓名和计算出的年龄,但它不会显示单个最年长的人。我怎样才能让它工作? 这是我的密码

select dr_drvname as "Name", trunc(max((sysdate-dr_brthdate)/365)) as "Highest AGE"
from driver,dual
group by dr_drvname;

试着这样做:

SELECT top 1
  Firstname, LastName, Max([BirthDate]) as Oldest    
  FROM [Employees]
  group by BirthDate, FirstName, LastName

注意:如果多个人的出生日期相同,要求是什么?

尝试以下方法:

SELECT top 1
  Firstname, LastName, Max([BirthDate]) as Oldest    
  FROM [Employees]
  group by BirthDate, FirstName, LastName

注意:如果多个人的出生日期相同,有什么要求?

您可以使用分析函数

select dr_drvname as "Name", 
       trunc( months_between( sysdate, dr_birthdate )/ 12 ) "Highest Age"
  from (select dr_drvname ,
               dr_birthdate,
               rank() over (order by dr_birthdate) rnk
          from driver)
 where rnk = 1;

你可以使用解析函数

select dr_drvname as "Name", 
       trunc( months_between( sysdate, dr_birthdate )/ 12 ) "Highest Age"
  from (select dr_drvname ,
               dr_birthdate,
               rank() over (order by dr_birthdate) rnk
          from driver)
 where rnk = 1;

Oracle的另一种方式是:

SELECT
    dr_drvname AS "Name",
    trunc(months_between(sysdate, dr_birthdate) / 12) AS "Highest Age"
FROM
(
SELECT
    dr_drvname,
    dr_birthdate
FROM
    driver
ORDER BY
    dr_birthdate
)
WHERE
    ROWNUM = 1;

Oracle的另一种方式是:

SELECT
    dr_drvname AS "Name",
    trunc(months_between(sysdate, dr_birthdate) / 12) AS "Highest Age"
FROM
(
SELECT
    dr_drvname,
    dr_birthdate
FROM
    driver
ORDER BY
    dr_birthdate
)
WHERE
    ROWNUM = 1;

我可以使用WHERE trunc((sysdate-drbrthdate)/365)>97,因为我知道最高年龄是98岁,但这并不总是正确的。没有列出任何要求。我测试了我最初的建议,但失败得很惨,所以我编辑了我的答案。您仍然需要输入零件来计算年龄。问题是针对Oracle标记的,Oracle不支持
top 1
语法(尽管12g中有一些增强功能可以替代)。我不知道Oracle不支持top 1。我想你可以使用WHERE-rownum=1(我的家用计算机上没有Oracle,信不信由你)。我可以使用WHERE-trunc((sysdate-dr_brthdate)/365)>97,因为我知道最高年龄是98岁,但这并不总是正确的。没有列出任何要求。我测试了我最初的建议,但失败得很惨,所以我编辑了我的答案。您仍然需要输入零件来计算年龄。问题是针对Oracle标记的,Oracle不支持
top 1
语法(尽管12g中有一些增强功能可以替代)。我不知道Oracle不支持top 1。我认为您可以使用WHERE rownum=1(我的家用计算机上没有Oracle,信不信由你)。