Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/81.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_Date - Fatal编程技术网

Sql 求年差的最大值

Sql 求年差的最大值,sql,date,Sql,Date,我这里有两张桌子 BIODATA ID NAME 1 A 2 B YEAR ID JOIN YEAR GRADUATE YEAR 1 1990 1991 2 1990 1993

我这里有两张桌子

BIODATA
ID                    NAME
1                     A
2                     B

YEAR
ID                    JOIN YEAR            GRADUATE YEAR
1                     1990                 1991
2                     1990                 1993
我已经用过了

select 
    NAME, 
    max(year(JOIN_YEAR) - year(GRADUATE_YEAR)) as MAX 
from 
    DATA_DIRI 
right join DATA_KARTU 
    ON BIODATA.ID = YEAR.ID;
但结果是:

+--------+------+
| NAME   | MAX  |
+--------+------+
| A      | 3    |
+--------+------+

我已经尝试了很多不同类型的连接,但我仍然找不到如何命名为B。有人可以帮我吗?在此之前非常感谢如果您在选择集中同时使用聚合和非聚合,那么用于非聚合字段的行基本上是随机选取的

基本上,max的工作原理是这样的——它通过查询收集每个分组的所有行,如果没有分组依据,则所有行都计算max并将其放入结果中

但由于您还将其放入一个非聚合字段,因此它需要一个值——因此SQL所做的只是随机选取一行。你可能会想,‘好吧,为什么它不选max选的同一行呢?’但是如果你用的是平均值或计数呢?它们没有与之关联的行,因此它所能做的最好是随机拾取。这就是为什么这种行为普遍存在的原因


您需要做的是使用子查询。类似于从data_diri d1中选择d1.id,其中d1.graduate_year-d1.join_year=从data_diri d2中选择maxd2.graduate_year-d2.join_year如果您只提供两个表的数据,您应该从问题中删除额外的表,或者为它们添加数据,我建议使用SQLFIDLE作为提供数据和结构的一种方式。我从你提供的数据开始。但最重要的是,你需要提供一个理由,说明为什么你想要B而不是a。为什么不能两者兼而有之?加入列和研究生年的数据类型是什么?