Select top 1 sql server

via HKEPC Reader for Android
mingming123 發表於 2016-3-30 19:41



    行唔到

TOP

回覆 19# 我叫日日野


我之前都講左, 我唔係用開 Oracle, 所以唔知係咪有 row_number() 呢樣野.  
我見你話 #8 work, 所以至用呢個 funciton.
如果照你 #20 講要用 rownum, 咁你對應改番就得.

唔係話 group 幾多個 field 過關, 而係要睇 requirment 去寫野.
你要每個 account 只出一個, grouping 既基礎就只係 account_no, 再多就係亂黎既.
之後你個 group 入面要 rownum 最細果個, 用 having 去 filter 就得.
唔好因為知道答案係點, 就用句 SQL 去就, 亂咁加野去 group.
咁寫法, 今次 work, 唔代表下次都 work, 遲早出事.

HAVING 係 SELECT 入面既基本 Clause 有的, Oracle 無乜理由無.
你個 error 應該只係 row_number() 出問題.

TOP

本帖最後由 snoopy11hk 於 2016-3-31 08:31 編輯
回覆  我叫日日野


我之前都講左, 我唔係用開 Oracle, 所以唔知係咪有 row_number() 呢樣野.  
我見你話  ...
Super169 發表於 2016-3-31 00:07


你睇黎都唔太明白呢題問題的重心
呢題唔係 簡單的 aggregate function 做到的問題
因為你要睇哂咁多條 一個 group 入面咁多條, 先知到要攞邊一條

aggregate function 係aggregate 哂所有, 之後再 select aggregate 左的 result
呢一題係唔使 aggregate 任何野好似你咁講, group by 任何野都係prone to error

https://community.oracle.com/thread/2166897?start=0&tstart=0 #4
aggregates take "many rows, collapse them into one"

analytics "do not, there is no row collapsing"


基本上如果你唔用 row_number() 的話你要
一個 group by 左 account_no, min(input_date), count()
join 埋 原本的 table

TOP

本帖最後由 Super169 於 2016-3-31 09:47 編輯
你睇黎都唔太明白呢題問題的重心
呢題唔係 簡單的 aggregate function 做到的問題
因為你要睇哂咁多條 一 ...
snoopy11hk 發表於 2016-3-31 08:18



SQL 應該係基於 requirement 去寫.

如果你用 min(input_date), 可以出現同一日有幾條 row, 就唔係原本既 requirement.
如果本身有 rownum 去 unique 咁排序, 輸入次序就應該睇番 rownum, 用 input_date 已經肯定係錯.
如果無 rownum 既, 原本既 requirement 就唔夠條件去做, 做唔到就係做唔到, 唔可以睇住答案去諗.

至於你話要睇哂個 group 既 row 至先, 呢個係事實.  除非本身有 index 係合用, 否則 min(input_date) 一樣係睇哂個 group 入面咁多條.  我唔 sure analytics function 係咪 sub-query 既原理, 但如果無 index 合用, 都係要做一次 table scan.

簡單去諗下, 我比一堆 record 你, 如果本身無排序, 你唔睇哂全部, 又點知邊條係最細?  無論 base on 邊個 field 都係一樣.  原本既題目無講明有乜野 index, 唔可以假設有條 index 係 account_no 再排 input_date.  相反, 如果佢本身有 recnum 既概念, 背後自動送條 index 落 recnum 都唔奇, 不過, 亦唔需要假設有呢樣野.

始終都係果句, 唔好睇完 data 知道答案再去諗條 SQL 點做個答案出黎, 應該係睇 requirement 去做野.

TOP

回覆 23# snoopy11hk

補充多少少, 我驚自己誤會左你呢句野:

你睇黎都唔太明白呢題問題的重心
呢題唔係 簡單的 aggregate function 做到的問題
因為你要睇哂咁多條 一個 group 入面咁多條, 先知到要攞邊一條


你既意思, 係想話 having 唔 work, 定係 話 having 要睇哂咁多個 group 入面咁多條, 所以唔好.

如果係前者, 唔該你試一試先.
如果係後耆, 我上面答左你了.

你想講問題既重心係乜?  對我黎講, 只係需要基於 requirement 搵出最簡單既就係了.
除非有要求, 我唔會理 D field 叫乜.

或者我變另一條題目出黎,


要搵每個 account_no 最細 recnum 果條 row 出黎, 你會點寫?
方法可以好多, 用 having 可以, 用 sub-query 搵無人細過你又得, 但你會唔會用 x, y, z 呢幾個 field 呢?
上面既 x, 有類似 input_date 既效果, 但基於個題目, 需要用佢嗎?
附件: 您需要登錄才可以下載或查看附件。沒有帳號?註冊

TOP

回覆  snoopy11hk

補充多少少, 我驚自己誤會左你呢句野:



你既意思, 係想話 having 唔 work, 定係 話 h ...
Super169 發表於 2016-3-31 10:04



    having 係 aggregate function 之後的 condition
但係樓主而家個 requirement 係唔需要 row collapsing, 即係用純 aggregate function 90% 錯

TOP

本帖最後由 Super169 於 2016-3-31 18:21 編輯
having 係 aggregate function 之後的 condition
但係樓主而家個 requirement 係唔需要 row collaps ...
snoopy11hk 發表於 2016-3-31 14:33



其實你有無真係試過架?  同埋你知唔知點用既?  唔好只係拋書包.
樓主既要求, under account_no 中搵第一條, 呢個咪係 having + aggregate function 做既野.
唔鐘意咁寫, 可以用 sub-query 都得, 如果唔介意 scan 多次, 用 table join 都得, 但唔可以話呢樣係錯.  

又或者你認為應該點寫?  大家研究下.

TOP

本帖最後由 Super169 於 2016-3-31 18:19 編輯
having 係 aggregate function 之後的 condition
但係樓主而家個 requirement 係唔需要 row collaps ...
snoopy11hk 發表於 2016-3-31 14:33



其實你既意思, 係咪想話 having 應該只係跟 count, average 之類, 又或者 process 一 group row 用?    呢D係一般書本用既例子.
你再了解下 having 點運作,  就會明白點解 min / max 之類都可以咁用.   唔好忘記, 一個 group 唔一定要好多條 row, 可以係一條.

如果話需唔需要, 應該係睇對 performance 有無影響.  你要搵每個 group 最細果條, 如果無 index, scan 哂  d record 係必須既.  如果 account_no + input_date 或者甚至 account_no + recnum 有 index, 為左 performance, 就唔會用 group 入面既 having.  呢個情形就可以講係無需要.

但係,  有無需要同對錯又係另一回事.  我唔熟 Oracle, 唔肯定佢會唔會有 D 特別既 function 會方便D, 但唔代表呢個做法係錯.

就用我上面比出黎個例子, 你試下應該點寫, 實戰比紙上談兵實際得多吧.

TOP

冇錯, 我已經搵到答案了, thanks anyway!  
table 本身有記錄每條 record 既row number 的, ...
我叫日日野 發表於 30/3/2016 22:53

其實不應用 row number, 加一個 column 叫 Input_time(?) 好啲!
用正式的 column names 設計個 database 吧!

TOP

回覆 29# toylet


我都想...不過我只係一個 user...

不過都好既, 就當學多樣野!

TOP