如何在未选取DATE列时按其对REF_ID排序?附REF_ID谱系SQL脚本
解决方法:用子查询/CTE实现排序且不展示DATE列
没问题,这事儿很好解决——你只需要把原本包含DATE的查询逻辑打包成一个子查询或者CTE(公共表表达式),外层查询只提取你需要的REF_ID,同时在外层保留ORDER BY子句引用DATE列就行。这样既满足了按DATE排序的要求,最终结果里也不会出现DATE列。
方式一:使用子查询
SELECT ref_id FROM ( -- 原有的查询逻辑,保留DATE用于排序 SELECT old.REF_ID, old.DATE FROM REFID_HISTORY old INNER JOIN REFID_HISTORY new ON new.REF_ID = old.REF_ID UNION SELECT new.REF_ID, new.DATE FROM REFID_HISTORY new INNER JOIN REFID_HISTORY old ON new.REF_ID = old._REF_ID ) AS refid_temp ORDER BY DATE DESC;
方式二:使用CTE(更易读)
如果你的数据库支持CTE(像MySQL 8+、PostgreSQL、SQL Server这些主流数据库都支持),用这种写法会更清晰:
WITH refid_temp AS ( -- 原有的查询逻辑,保留DATE用于排序 SELECT old.REF_ID, old.DATE FROM REFID_HISTORY old INNER JOIN REFID_HISTORY new ON new.REF_ID = old.REF_ID UNION SELECT new.REF_ID, new.DATE FROM REFID_HISTORY new INNER JOIN REFID_HISTORY old ON new.REF_ID = old._REF_ID ) SELECT ref_id FROM refid_temp ORDER BY DATE DESC;
补充说明
SQL语法允许ORDER BY引用子查询/CTE中定义的列,哪怕外层SELECT没有包含该列。这样就完美实现了你的需求:按DATE排序,但最终结果只展示REF_ID。
内容的提问来源于stack exchange,提问作者user2102665
相关产品推荐
相关产品推荐

