看板 Soft_Job 關於我們 聯絡資訊
最近遇到好多sql問題.. 這個greatest-n-per-group的解法似乎很經典,但是有點不懂 參考這個問題跟解答 https://stackoverflow.com/questions/7745609/ 裡面的這個sql SELECT a.* FROM YourTable a LEFT OUTER JOIN YourTable b ON a.id = b.id AND a.rev < b.rev WHERE b.id IS NULL; 為什麼最後WHERE b.id IS NULL會得到最大值的那些row 雖然裡面有講當得到最大值的時候 right會是NULL 但是就是不懂為什麼會是NULL啊 XD 是一個類似"反向選取"的概念嗎? 有人可以提供詳細說明嗎 Orz -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 111.249.219.82 ※ 文章網址: https://www.ptt.cc/bbs/Soft_Job/M.1537283349.A.ADB.html
forever84721: 都講出來了 join不到東西就null呀 感覺不是很常寫jo 09/18 23:26
forever84721: in? 09/18 23:26
zelda123: 定義看一下 https://goo.gl/Hm1GCn 09/18 23:31
alan3100: 可改where not exists(...id=id and rev<rev)比較好理解 09/18 23:35
asleepme: 也就是說,join不到的東西還是可以拿來做判斷 09/18 23:48
asleepme: sorry 的確不熟 QQ 09/18 23:48
ChungLi5566: 你把WHERE拿掉跑一次就知道了 09/19 00:09
asleepme: 其實我拿掉where過,出來的結果就是跟想像的join一樣 09/19 00:37
asleepme: 但是加了那個WHERE後的結果很難從不加推演過來 Orz 09/19 00:38
fukinhot: 看到這需求 我直覺就是用row_num partition by rev ord 09/19 07:47
fukinhot: er by rev desc as rn 再取 rn = 1 09/19 07:47
fukinhot: 建議你試試看 很直覺 09/19 07:47
alan3100: 是row_num over (partition by id order by rev desc) 09/19 08:07
keyboard56: 試想rev 3大於 2 和 1所以id爲1的資料只有rev爲3的等 09/19 12:23
keyboard56: 於。不符合條件 自然那筆資料b的id會帶空值。所以資 09/19 12:23
keyboard56: 料a的3就被篩選出來了~ 09/19 12:23
keyboard56: 這比較不直覺 當然用partition較直覺 09/19 12:25