工單明細表需按旗標 flag_3 分組,取每組建立時間最新的一筆記錄。
SELECT * FROM (
SELECT *,
ROW_NUMBER() OVER (PARTITION BY wok.flag_3 ORDER BY wok.createtime DESC) AS rownum
FROM (
SELECT
workh.corp_code, workh.corp_name, workh.begin_date, workh.createtime,
workh.flag_1, workh.flag_2,
workb.main_id, workb.production_quantity, workb.spare_capacity,
workb.equipment_code, workb.flag_3
FROM imp_workorderh workh
RIGHT JOIN imp_workorderb workb ON workb.main_id = workh.id
WHERE workh.teachingplanid = '0000AA10000000016F6U'
) wok
) h
WHERE h.rownum = 1;
PARTITION BY flag_3:按旗標分組ORDER BY createtime DESC:組內按時間倒序ROW_NUMBER():分配 1,2,3... 序號WHERE rownum = 1:取每組第一筆(最新)WHERE rownum <= NPARTITION BY col1, col2WITH cte AS (...) SELECT * FROM cte WHERE rownum=1ROW_NUMBER() 需 SQL Server 2005+,2000 需用舊寫法(TOP 1 + 關聯子查詢)。