本帖最後由 snoopy11hk 於 2016-3-31 22:39 編輯
回覆  望月小妖


    WA! 我記得你個名!! 不過唔記得咩game 見過 XD

any肥, 我最後咁:
唔知係咪有D 蠢  ...
我叫日日野 發表於 2016-3-29 17:29



    我會咁寫
SELECT *
FROM
(
SELECT
a.*
, ROW_NUMBER() OVER (PARTITION BY ACCOUNT_NO ORDER BY INPUT_DATE ASC) AS ROW_NUM
FROM a
)
WHERE ROW_NUM = 1
[fix comma @ 2016 March 31 22:38]

TOP

得左, 囉到所有 account 既第一條 record 出黎!
簡短過我上面 7# 果條

不過  "ACCOUNT_NO" 同 " ...
我叫日日野 發表於 2016-3-30 21:46


太耐無寫, 唔係好記得 D syntax

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

回覆  snoopy11hk

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



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



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

TOP

本帖最後由 snoopy11hk 於 2016-3-31 21:47 編輯
其實你有無真係試過架?  同埋你知唔知點用既?  唔好只係拋書包.
樓主既要求, under account_no 中搵第一 ...
Super169 發表於 2016-3-31 17:51



    相信你用開的 dbms 無 analytic function, 所以先會用 aggregate function 黎做..
我都有提供 suggested aggregate function solution
即係 aggregate by account_no, count, 等等, 再 join 埋原本的 table

但係 如果有 analytic function 出現的 dbms, 用 aggregate function 就係 very prone to error, 即係我講的 90% 用錯

其實我兩隻 version 都有比到
analytic function 的俾左 95% 的 code (樓主幫手 fix 左個, )
aggregate function 的都俾左 pseudo code 出黎

TOP

本帖最後由 snoopy11hk 於 2016-3-31 22:40 編輯
回覆  snoopy11hk
  
我唔你好明你成日話 prone to error 係想表達乜野.  寫 code 易唔易出錯, 係睇寫果個 ...
Super169 發表於 2016-3-31 22:31



    我唔係太想去 struggle 係呢 D 咁 minor 的野
重點回

HAVING row_number() = min(row_number())
-->呢句係 oracle 行唔到, analytic function can only exist in select list or order by

寫 code 易唔易出錯, 其實係睇個意思
-->用錯 analytic/aggregate function 一樣會 prone to error
-->最簡單就係要唔要 row collapse, 要就去 aggregate, 唔要就analytic

我都比左個例子出黎咁耐, 不如你就用 analytic function 寫出黎比我學下野吧
-->analytic function 的係 #8

TOP

本帖最後由 snoopy11hk 於 2016-3-31 23:04 編輯
你唔會係講緊 row_number() 呢個 function 唔 work 掛?

OMG....唔該係睇番上去, 我一早講左我唔知 Oracl ...
Super169 發表於 2016-3-31 22:42
  1. SELECT input_date, account_no, product_cd, agent
  2.   FROM table
  3. GROUP BY account_no
  4. HAVING rownum = min(rownum)
複製代碼
我當係咁行先
其實呢句就咁睇已經係 唔合符 standard sql 的 syntax
group by account_no
input_date, product_cd, agent 都要有 aggregate function 去包番佢
即係 i.e.
SELECT ACCOUNT_NO, MIN(INPUT_DATE), MIN(PRODUCT_CD), MIN(AGENT)
即係你 row collapse 左 D data, 肯定90% 會錯

就算咁好彩無錯, 都唔代表思考方式正確

而 analytic function 就唔係 row collapse
再講得明白D, 你見係
SELECT *
FROM (SELECT ..... FROM TABLE)
WHERE ROW_NUM = 1
即係只係 再 filter 多一次

TOP

本帖最後由 snoopy11hk 於 2016-4-1 00:05 編輯
頭先提過, 一個 group 唔一定係好多條 row 既.  
唔明白既人可能以為好彩, 你可以用唔同既 table 試下,  ...
Super169 發表於 2016-3-31 23:35



    我唔知 SQL Server 有無enforce 到我話的
"Column 'xyz' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause."

但 oracle 有呢隻 error
ORA-00979: not a GROUP BY expression


SQL 本來就真係只有幾個 keyword, 但係而家 的 MSSQL 好, Oracle SQL 好, 都有好多新野
Apply, Pivot,  Virtual Table 等等等
呢D 新野 可以令到個 logic 更直觀, 更易明, 唔係 dirty tricks

繼續講少少 oracle 野
oracle 的 rownum 係 dynamic column, 係 select 後先出, 所以rownum in (rownum, rownum2, rownum3) 係唔 work
如果要 fix row 係要用 rowid

TOP

回覆  snoopy11hk


唔好意思, 原來 #8 係你提供既, 我 miss 左, 仲成日叫你比 sample 我, 呢樣係我錯.
見 ...
Super169 發表於 2016-4-1 00:06


1, 2/input_date 唔 unique, 答案未必 deterministic, 可以 random 咁 A or B
呢個問題要交番去 design db果個,
要 deterministic 的可以用 rowid/ primary key

當然需唔需要就由樓主的DBA 決定

3/ Performance 呢家野你少擔心好了
連 SQL 都未行得郁你擔心點 改好過了

4/ 睇黎你唔明 analytic function 做的野
而家個問題係要揾第一條, 係要揾哂 related 的先知邊條係第一條
以 performance 黎講係無得慳

TOP

本帖最後由 snoopy11hk 於 2016-4-1 00:28 編輯
回覆  snoopy11hk



開始明白你點解話要 min, min, min 佢地了.
忽然有個想法, 因為 having 既結果係 uni ...
Super169 發表於 2016-4-1 00:23


好大機會 compile 行唔到, 又有機會 runtime error 出黎, 又有機會無病無痛
不過多數都 compile 唔到, 好少時間 runtime error/ 無 error 出

係, min, max 佢地實在解唔通, 只可以話係 dirty tricks, 個人實在不敢荀同

TOP