找出年差的最大值

时间:2013-03-05 05:59:15

标签: sql date

我这里有两张桌子

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    |
+--------+------+

我已经尝试了很多不同类型的连接,但我仍然无法找到NAME如何成为“B”。有人可以帮帮我吗?非常感谢

1 个答案:

答案 0 :(得分:2)

如果您一次在选择集中使用聚合和非聚合,则用于非聚合字段的行基本上是随机选取的。

基本上,max是如何工作的 - 它通过查询收集每个组的所有行(如果没有group by,all all),计算max并将其放入结果中。

但是既然你也放入了一个非聚合字段,它需要一个值 - 所以SQL所做的就是选择一个随机行。你可能会想'好吧,为什么它不选择同一行max?'但如果你使用avg或count怎么办?它们没有与之关联的行,因此它能做的最好是随机选择。这就是为什么这种行为一般存在的原因。

您需要做的是使用子查询。像select d1.id from data_diri d1 where d1.graduate_year - d1.join_year = (select max(d2.graduate_year - d2.join_year from data_diri d2))

这样的东西