You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在SQL中按日期降序排序并连续分组COL_A/COL_B/COL_C数据

SQL排序需求:按组聚合并按最新日期优先排列

我需要用SQL对数据做如下排序:

  • 优先按start_date降序,确保最新的交易记录排在最前面
  • 同时将COL_A、COL_B、COL_C字段相同的记录归为一组,保持连续排列

试过ROW_NUMBER和DENSE_RANK函数,但没实现需求,求帮忙。

表数据

COL_ACOL_BCOL_CTASKSTART_DATESTATUS
REFERENCEGOLDETLUpload2022-08-04 16:40:17.000Completed
REFERENCEGOLDETLTranslate2022-08-04 16:36:33.000Completed
REFERENCEGOLDETLExtract2022-08-04 16:21:41.000Completed
HiveBRONZEWORKFLOWTranslate2022-08-04 12:30:25.000Failed
HiveDMETLExtract2022-08-04 12:23:55.000Completed
HiveBRONZEWORKFLOWExtract2022-08-04 12:15:44.000Completed
StandaloneCONSETLExtract2022-08-04 07:17:31.000Failed
Moving WindowAGGETLUpload2022-08-03 15:08:48.000Completed
Moving WindowAGGETLTranslate2022-08-03 15:05:41.000Completed
Moving WindowAGGETLExtract2022-08-03 14:53:50.000Completed
Moving WindowANLTETLUpload2022-08-03 14:31:17.000Completed
Moving WindowANLTETLTranslate2022-08-03 14:26:17.000Completed
Moving WindowANLTETLExtract2022-08-03 14:17:50.000Completed
HiveBRONZEBILLTranslate2022-08-03 13:46:19.000Completed
StandaloneCONSETLExtract2022-08-03 13:34:09.000Failed

预期输出

COL_ACOL_BCOL_CTASKSTART_DATESTATUS
REFERENCEGOLDETLUpload2022-08-04 16:40:17.000Completed
REFERENCEGOLDETLTranslate2022-08-04 16:36:33.000Completed
REFERENCEGOLDETLExtract2022-08-04 16:21:41.000Completed
HiveBRONZEWORKFLOWTranslate2022-08-04 12:30:25.000Failed
HiveBRONZEWORKFLOWExtract2022-08-04 12:15:44.000Completed
HiveDMETLExtract2022-08-04 12:23:55.000Completed
StandaloneCONSETLExtract2022-08-04 07:17:31.000Failed
Moving WindowAGGETLUpload2022-08-03 15:08:48.000Completed
Moving WindowAGGETLTranslate2022-08-03 15:05:41.000Completed
Moving WindowAGGETLExtract2022-08-03 14:53:50.000Completed
Moving WindowANLTETLUpload2022-08-03 14:31:17.000Completed
Moving WindowANLTETLTranslate2022-08-03 14:26:17.000Completed
Moving WindowANLTETLExtract2022-08-03 14:17:50.000Completed
HiveBRONZEBILLTranslate2022-08-03 13:46:19.000Completed
StandaloneCONSETLExtract2022-08-03 13:34:09.000Failed

解决方案

要实现需求,核心是先按每组的最新日期排序分组,组内再按单条记录的日期降序排列,以下两种方法均可实现:

方法一:子查询关联

SELECT t.*
FROM your_table t
JOIN (
    SELECT COL_A, COL_B, COL_C, MAX(START_DATE) AS max_start_date
    FROM your_table
    GROUP BY COL_A, COL_B, COL_C
) g ON t.COL_A = g.COL_A AND t.COL_B = g.COL_B AND t.COL_C = g.COL_C
ORDER BY g.max_start_date DESC, 
         t.COL_A, t.COL_B, t.COL_C,
         t.START_DATE DESC;

方法二:窗口函数(更简洁)

SELECT *
FROM your_table
ORDER BY 
    MAX(START_DATE) OVER (PARTITION BY COL_A, COL_B, COL_C) DESC,
    COL_A, COL_B, COL_C,
    START_DATE DESC;

逻辑说明

  • 外层排序首条件为每组的最大start_date降序,确保最新的组排在最前
  • 接着按COL_A、COL_B、COL_C排序,保证同组记录连续
  • 最后按单条记录的start_date降序,组内最新记录优先展示

内容的提问来源于stack exchange,提问作者LNC

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.23 03:57:21