[討論] 資料庫大師請進

看板Marginalman作者 (灯露家的小蠟燭)時間2年前 (2023/12/28 13:29), 2年前編輯推噓1(105)
留言6則, 3人參與, 2年前最新討論串1/2 (看更多)
情境是有100萬隻VT豚跟50個水管頻道 V豚每天會看好幾次直播,每次可能看同個頻道,也可能看不同頻道 每當VT豚點開水管頻道看台,在資料庫紀錄VT豚、頻道名、時間、跟一些其他東西 (索引建在VT豚) 原本的需求是指定任一隻V豚,回傳他最近一次看的頻道 做法很單純 SELECT TOP(1) 頻道 FROM [看台紀錄] WHERE VT豚 = 'laptic' ORDER BY 時間 DESC 現在查詢需求改成要回傳他最近看過的3個相異頻道 姆咪的想法是用窗函數先排出每個頻道的最後一次觀看時間,再去排序取最新3個 WITH T AS ( SELECT 頻道,時間, ROW_NUMBER() OVER (PARTITION BY VT豚, 頻道 ORDER BY 時間 DESC) AS R FROM [看台紀錄] WHERE VT豚 = 'laptic' ) SELECT TOP(3) 頻道 FROM T WHERE R = 1 ORDER BY 時間 DESC 看起來結果是對的,但怕調整後影響到效能 有什麼效率更好的方法嗎? -- https://i.imgur.com/oBuOuCs.jpg
-- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 211.20.70.229 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/Marginalman/M.1703741381.A.EEE.html walter741225: 直接排時間 從頭抓直到抓到第三個不同 12/28 13:31

12/28 13:32, 2年前 , 1F
就你原本的作法是只抓第一筆
12/28 13:32, 1F

12/28 13:32, 2年前 , 2F
改成一直 抓 重複的丟掉 不同的紀錄
12/28 13:32, 2F

12/28 13:32, 2年前 , 3F
紀錄到第三個不同的就跳出
12/28 13:32, 3F
用LOOP嗎?這樣會比較不吃效能? koy784512: 為什麼不用DISTINCT直接前抓三個 12/28 13:32 原本也是這樣想,但DISTINCT(頻道)後就不知道怎麼再排時間了

12/28 13:36, 2年前 , 4F
等一下 DISTINCT好像不行 時間都不一樣==
12/28 13:36, 4F
※ 編輯: an94mod0 (211.20.70.229 臺灣), 12/28/2023 13:38:16 ILoveNTR: 抓出來會亂484時間格式的關係 之前有遇過類似問題 12/28 13:55 @ 以上紅底標記3位,每人500P(稅後)發送完成! by AutoGiveP 2.12

12/28 13:55, 2年前 , 5F
另外拉一行重新定義時間再用那行排序 雖然蠻蠢的
12/28 13:55, 5F

12/28 14:07, 2年前 , 6F
我c語言派的會想這樣做
12/28 14:07, 6F
※ 編輯: an94mod0 (211.20.70.229 臺灣), 12/28/2023 14:49:50
文章代碼(AID): #1bZGV5xk (Marginalman)
文章代碼(AID): #1bZGV5xk (Marginalman)