1

複数の列を返す SQL を作成し、そのうちの 1 つに最大値を選択したいと考えています。例を挙げて明確にしましょう。

実際には、次のようなものが必要です。

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

これを行う 1 つの方法は、ウィンドウ/分析関数を使用することです。

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

副選択クエリは正しかった。共通テーブル式を使用して同じ結果を達成することもできます。

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 に答える
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 に答える