SELECT a.*
FROM table1 a
WHERE a.column1 IN (
SELECT MAX(column1)
FROM table1
GROUP BY a.column2, column3
);
適用:單欄位分組、取極值、資料量中等。
WITH nyr AS (
SELECT
NYR, QYZX_DM, FXSP_XH, SPBM_DLJ, WBSP_GG, JGLX, JZJG, MAX(SJGX_SJ),
ROW_NUMBER() OVER (PARTITION BY NYR ORDER BY NYR) AS rowno
FROM WD_O_T_IC_SPSJ_FX
GROUP BY NYR, QYZX_DM, FXSP_XH, SPBM_DLJ, WBSP_GG, JGLX, JZJG
)
SELECT * FROM nyr WHERE rowno = 1;
原文 WHERE rowno=1 置於 CTE 內部會報錯,正確寫法:
rownoWHERE rowno = 1WHERE rowno <= N
IN 子查詢,改用 ROW_NUMBER 或 CROSS APPLYCROSS APPLY 寫法(SQL Server 專用,效能通常最優):SELECT t.*
FROM TableA g
CROSS APPLY (
SELECT TOP 1 * FROM TableB d WHERE d.group_id = g.id ORDER BY d.created DESC
) t;