1

我想编写一个 SQL,它返回多个列,其中一个具有选择最大值。让我用一个例子来说明。

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

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

所以我想要的是对一列执行最大选择,但还要获取该行/那些行的其他列。

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
                    )           

但我不明白为什么其他方法不起作用。有谁知道如何实现这一目标?

4

3 回答 3

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
于 2012-08-21T13:56:24.170 回答
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
于 2012-08-21T13:51:18.990 回答
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
于 2012-08-22T06:33:40.000 回答