我想编写一个返回多个列的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
)
但我无法理解为什么其他方法不起作用。 有人知道如何实现这个目标吗?
答案 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