4 回答

TA貢獻1797條經驗 獲得超6個贊
這將檢索my_date列值等于該userid的my_date的最大值的所有行。這可以為userid檢索多行,其中最大日期在多行上。
select userid,
my_date,
...
from
(
select userid,
my_date,
...
max(my_date) over (partition by userid) max_my_date
from users
)
where my_date = max_my_date
“分析功能搖滾”
編輯:關于第一條評論......
“使用分析查詢和自連接會破壞分析查詢的目的”
此代碼中沒有自聯接。而是在內聯視圖的結果上放置了一個謂詞,其中包含分析函數 - 一個非常不同的問題,以及完全標準的實踐。
“Oracle中的默認窗口是從分區的第一行到當前的一行”
windowing子句僅適用于order by子句的存在。如果沒有order by子句,則默認情況下不應用windowing子句,并且不能顯式指定任何窗口子句。
代碼有效。

TA貢獻1786條經驗 獲得超11個贊
SELECT userid, MAX(value) KEEP (DENSE_RANK FIRST ORDER BY date DESC)
FROM table
GROUP BY userid

TA貢獻1757條經驗 獲得超7個贊
沒有工作,我沒有掌握Oracle,但我似乎記得Oracle允許在IN子句中匹配多個列,這至少應該避免使用相關子查詢的選項,這很少是一個好的理念。
也許這樣的事情(不記得列列表是否應該加括號):
SELECT *
FROM MyTable
WHERE (User, Date) IN
( SELECT User, MAX(Date) FROM MyTable GROUP BY User)
編輯:剛嘗試真實:
SQL> create table MyTable (usr char(1), dt date);
SQL> insert into mytable values ('A','01-JAN-2009');
SQL> insert into mytable values ('B','01-JAN-2009');
SQL> insert into mytable values ('A', '31-DEC-2008');
SQL> insert into mytable values ('B', '31-DEC-2008');
SQL> select usr, dt from mytable
2 where (usr, dt) in
3 ( select usr, max(dt) from mytable group by usr)
4 /
U DT
- ---------
A 01-JAN-09
B 01-JAN-09
所以它有效,盡管其他地方提到的一些新東西可能更有效。
添加回答
舉報