Mariadb
每組最大 n 的變化,其中需要使用指示器的整個表,而不僅僅是每組最大的行
我有一個查詢,它返回一些對列和日期進行分組的行。我希望該查詢在列中指示每個組中的哪一個具有最大的日期。
關於如何做“每組最大 n”的問題有很多,但這些問題只需要每個組中具有最大價值的行。我想要所有的行,並且只是指出哪一個是最大的。
例如,這是一個表:
我想要以下內容:
我已經嘗試了一些 best-n-per-group 方法來添加“最大”指標。但是由於這些嘗試都集中在唯一具有最大值的行上,因此當像“table2.date IS NULL”這樣的 where 子句的部分被刪除時,所有連接組合都會添加額外的行。
這是一個不起作用的實驗的例子。它嘗試使用每個組的最大 n 個,但註釋掉 IS NULL 行:
SELECT DISTINCT m1.usermessageid, m1.repid, m1.sender_role, m1.message, m1.datesent, m2.datesent FROM usermessage m1 LEFT JOIN usermessage m2 ON m1.principalid = m2.principalid and m1.repid = m2.repid AND m1.datesent < m2.datesent WHERE m1.principalid = 99831 AND m1.repid IN (21600,99214,27058,97360,92678,96184,55429,46029) # AND m2.datesent IS NULL ORDER BY m1.datesent desc;
我想避免為了獲得最大的行而必須添加額外的查詢。
使用視窗函式:
SELECT ROW_NUMBER() OVER (PARTITION BY repid ORDER BY date DESC) = 1 AS greatest, ...
這需要 MySQL 8.0.02 或 MariaDB 10.2.0 才能使用視窗函式。