15

日付フィールドに基づいて最新のレコードを見つけようとしています。where 句で latest = 1 を設定すると、エラーが発生します。可能であれば助けてください。DATE は、私がソートしているフィールドです。latest = 1 と latest = '1' の両方を試しました

SELECT 
STAFF_ID,
SITE_ID,
PAY_LEVEL,
ROW_NUMBER() OVER (PARTITION BY STAFF_ID ORDER BY DATE DESC) latest

 FROM OWNER.TABLE
WHERE   END_ENROLLMENT_DATE is null 
AND latest = 1
4

4 に答える 4

30

WHERE句内の選択リストからエイリアスを使用することはできません(SELECTステートメントの評価順序のため)

OVERまた、 WHERE句内で句を使用することはできません-「選択リストまたはORDER BY句でこの句を使用して分析関数を指定できます。」( docs.oracle.comからの引用)

select *
from (select
  staff_id, site_id, pay_level, date, 
  max(date) over (partition by staff_id) max_date
  from owner.table
  where end_enrollment_date is null
)
where date = max_date
于 2012-06-20T21:26:54.647 に答える
5

staff_id + 日付が英国であると仮定すると、これは別の方法です。

SELECT STAFF_ID, SITE_ID, PAY_LEVEL
  FROM TABLE t
  WHERE END_ENROLLMENT_DATE is null
    AND DATE = (SELECT MAX(DATE)
                  FROM TABLE
                  WHERE staff_id = t.staff_id
                    AND DATE <= SYSDATE)
于 2012-06-20T21:17:02.573 に答える
4

私はMAXで次のようなものを試してみると思います:

SELECT staff_id, max( date ) from owner.table group by staff_id

次に、他の列にリンクします。

select staff_id, site_id, pay_level, latest
from owner.table, 
(   SELECT staff_id, max( date ) latest from owner.table group by staff_id ) m
where m.staff_id = staff_id
and m.latest = date
于 2012-06-20T21:10:19.270 に答える
3
select *
from (select
  staff_id, site_id, pay_level, date, 
  rank() over (partition by staff_id order by date desc) r
  from owner.table
  where end_enrollment_date is null
)
where r = 1
于 2014-01-28T13:24:57.250 に答える