繁体   English   中英

select 一列的最大值来自另一字段的多个值

[英]select max value of one column from multiple values of another field

使用 Advantage Architect,我有一个包含两列的表,例如说 IDENT 和 DATE。 每个 DISTINCT IDENT 可能有多个 DATE 值,因此如果执行 SELECT *,则每个 IDENT 和 DATE 都有一行。 但是,虽然我可以使用下面的代码来获取每个 IDENT 的 MAX DATE 值,但在此表中会有 DATE 值为 NULL 的实例,并且我不想要任何有任何 DATE 的结果给定 IDENT 是 null。 因此,实际上,我只希望我的语句显示结果,其中针对 IDENT 的唯一 MAX DATE 值来自针对没有 null 日期的 IDENT 的 DATES。 有任何想法吗?

表示例:

IDENT | DATE
0001  | 19/12/2011
0001  | 30/12/2011
0001  | NULL
0002  | 01/01/2012
0002  | 30/01/2012 

我到目前为止的代码:

select ident, max(date)
from Table A
group by ident;

所需 Output:

IDENT | DATE
0002  | 30/01/2012 

像以前一样执行GROUP BY ,使用HAVING排除具有 null 起息日的身份。

select ident, max(date)
from Table A
group by ident
having count(date) = count(*)

将起作用,因为count(date)计算非空日期,但count(*)计算所有行。

对于 ident 0001 count(date) = 2 ,但count(*) = 3 即没有返回。

对于 ident 0002 count(date) = 2count(*) = 2 即返回。

不确定我是否理解您的问题,但您想排除至少存在 1 行具有NULL日期的标识。

尝试这个:

SELECT   a.ident,
         MAX(a.date)
FROM     Table a
WHERE    NOT EXISTS (SELECT *
                     FROM   Table b
                     WHERE  a.ident = b.ident
                       AND  b.date IS NULL)
GROUP BY a.ident;

我似乎在这里忽略了一个额外的细节,因为作为表中 select 语句的一部分,我想要引入另一列的关联值。因此,它将是 IDENT、DATE、REF,其中 REF 与IDENT 和已通过的 MAX DATE。 但是,我似乎无法做到这一点,因为 REF 不在 GROUP BY 部分中,并且当我将其添加为 GROUP BY 的一部分时,它会扭曲我的结果。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM