User_idが1のユーザーのテーブルuser_paymentsから最新のmembership_idのみを選択します。
これは、テーブルuser_paymentが次のようになることを示しています。
PAYM_ID USER_ID MEMBSHIP_ID PAYM_DATE
---------- ---------- ----------- -------------------------------
1 1 1 18-DEC-09 12.00.00.000000000 AM
2 1 2 18-DEC-10 12.00.00.000000000 AM
3 1 2 18-DEC-11 12.00.00.000000000 AM
4 2 3 17-MAR-11 12.00.00.000000000 AM
5 3 3 18-JUN-12 12.00.00.000000000 AM
6 4 2 17-FEB-12 12.00.00.000000000 AM
7 5 2 18-FEB-11 12.00.00.000000000 AM
8 5 2 18-FEB-12 12.00.00.000000000 AM
9 6 1 01-JUN-12 12.00.00.000000000 AM
10 7 1 03-FEB-11 12.00.00.000000000 AM
11 7 2 03-FEB-12 12.00.00.000000000 AM
私は成功せずに次のコードを試しています:
SELECT MEMBSHIP_ID
FROM user_payment
WHERE user_id=1 and MAX(paym_date);
そして、私はこのエラーを受け取ります:SQLエラー:ORA-00934:ここではグループ関数は許可されていません00934. 00000-「ここではグループ関数は許可されていません」
どうすれば修正できますか?前もって感謝します!
select * from
(SELECT MEMBSHIP_ID
FROM user_payment WHERE user_id=1
order by paym_date desc)
where rownum=1;
SELECT p.MEMBSHIP_ID
FROM user_payments as p
WHERE USER_ID = 1 AND PAYM_DATE = (
SELECT MAX(p2.PAYM_DATE)
FROM user_payments as p2
WHERE p2.USER_ID = p.USER_ID
)
試してください:
SELECT MEMBSHIP_ID
FROM user_payment
WHERE user_id=1
ORDER BY paym_date = (select MAX(paym_date) from user_payment and user_id=1);
または:
SELECT MEMBSHIP_ID
FROM (
SELECT MEMBSHIP_ID, row_number() over (order by paym_date desc) rn
FROM user_payment
WHERE user_id=1 )
WHERE rn = 1
Oracle 9i +(たぶん8iも)には、FIRST/LAST集約関数があり、グループ内の行のランクに従って行のグループを計算します。すべての行を1つのグループとして想定すると、サブクエリなしで必要なものが得られます。
SELECT
max(MEMBSHIP_ID)
keep (
dense_rank first
order by paym_date desc NULLS LAST
) as LATEST_MEMBER_ID
FROM user_payment
WHERE user_id=1