2013-10-09 94 views
0

我想获得具有该最小值的行的关键字的特定值的最小值,。目前,我这样做如下:我可以在单个查询中获取与聚合有关的数据吗?

SELECT dates.date AS Date, num_apples.apples AS MinApples FROM 
(
    SELECT date, MIN(apples) AS MinApples, apples 
    FROM Table 
    HAVING MinApples = apples 
) AS dates 
JOIN 
(
    SELECT date, apples 
    FROM Table 
) AS num_apples 
ON (
    dates.date = num_apples.date 
); 

有没有更好的方式来做到这一点只使用“标准”(我的意思是通常实现)SQL?

+1

这是标准的,除了你必须用having子句中的实际聚合来代替的MinApples别名。 – Sebas

回答

1

假设date是你的钥匙:

SELECT qryNumApples.* FROM 
(
    SELECT MIN(apples) AS MinApples 
    FROM Table 
) AS qryMinApples 
JOIN 
(
    SELECT * 
    FROM Table 
) AS qryNumApples 
ON qryMinApples.MinApples= qryNumApples.apples 
); 
1

这是ANSI标准的SQL:

select * 
from (
    select date, 
     apples, 
     min(apples) over() as min_apples 
    from the_table 
) t 
where apples = min_apples; 

窗口函数在宽范围DBMS是可用的。

1

我一直做到了这样:

SELECT * 
FROM the_table 
WHERE apples = (SELECT MIN(apples) 
        FROM the_table); 

但也许我失去了一些东西。

相关问题