亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

獲取具有列的最大值的行

獲取具有列的最大值的行

繁星淼淼 2019-05-21 16:13:24
獲取具有列的最大值的行表:UserId, Value, Date.我想得到UserId,每個UserId的max(Date)值。也就是說,具有最新日期的每個UserId的值。有沒有辦法在SQL中執行此操作?(最好是Oracle)更新:對任何含糊不清的道歉:我需要獲得所有UserIds。但對于每個UserId,只有該用戶具有最新日期的那一行。
查看完整描述

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子句,并且不能顯式指定任何窗口子句。


代碼有效。


查看完整回答
反對 回復 2019-05-21
?
Qyouu

TA貢獻1786條經驗 獲得超11個贊

SELECT userid, MAX(value) KEEP (DENSE_RANK FIRST ORDER BY date DESC)

  FROM table

  GROUP BY userid


查看完整回答
反對 回復 2019-05-21
?
長風秋雁

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

所以它有效,盡管其他地方提到的一些新東西可能更有效。


查看完整回答
反對 回復 2019-05-21
  • 4 回答
  • 0 關注
  • 480 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號