返回多个列,只选择一个选择最大值

时间:2012-08-21 13:49:27

标签: sql db2 mainframe

我想编写一个返回多个列的SQL,其中一个列的select max。 让我用一个例子来澄清。

实际上我想要这样的东西:

Select max(from_date)
      ,func_status_code
      ,name
from table
where from_date <= current date

所以我想要的是在列上执行select max,同时获取该行/那些行的其他列。

from_date   func_status_code   name
2012-08-21        1             A
2012-08-21        4             A
2012-08-20        5             A
2012-08-20        3             A

返回

from_date   func_status_code   name
2012-08-21        1             A
2012-08-21        4             A

我知道我可以做一个子选择,比如:

select from_date
      ,func_status_code
      ,name
  from table
  where from_date = (Select max(from_date)
                       from table
                       where from_date <= current date
                    )           

但我无法理解为什么其他方法不起作用。 有人知道如何实现这个目标吗?

3 个答案:

答案 0 :(得分:2)

一种方法是使用窗口/分析函数:

select func_status_code, name
from (Select func_status_code, name,
             max(from_date) over () as maxdate
      from table 
      where from_date <= current date
     ) t
where from_date = maxdate

答案 1 :(得分:0)

你缺少GROUP BY条款

SELECT from_date, MAX(func_status_code) maxCode, name
FROM tableName
-- WHERE from_date <= getDate()     -- extra condition here
GROUP BY from_date, name

答案 2 :(得分:0)

您的子选择查询是正确的。您也可以使用公用表表达式获得相同的结果。

WITH m as
(
  Select max(from_date) mxdate
    from table
    where from_date <= current date
)
select from_date
      ,func_status_code
      ,name
  from table t, m
 where t.from_date = m.mxdate