如何用QueryDsl按日期排序并将指定枚举值分组后置?
特定分组后置+全局日期升序的SQL排序方案
核心思路是给需要后置的分组设置更高的排序优先级值,让非目标分组先排,再统一按日期升序排序,具体实现如下:
假设你的表名为target_table,类型列是enum_column(枚举值为A/B/C),日期列是dateCreated,直接在SQL的ORDER BY子句中嵌套CASE表达式即可:
SELECT * FROM target_table ORDER BY CASE WHEN enum_column = 'A' THEN 1 ELSE 0 END, dateCreated ASC;
逻辑说明
CASE表达式会给所有enum_column = 'A'的行标记为1,其他行标记为0。排序时0会排在1前面,所以非A的分组整体前置,A组整体后置。- 第二个排序条件
dateCreated ASC会让所有行(包括A组内部)都按照创建日期升序排列,完全匹配你的需求。
对应示例验证
按照你给出的示例排序结果5,6,4,1,3,2,只要这些行的dateCreated是依次递增,且前3行(5/6/4)的类型非A,后3行(1/3/2)的类型为A,用上述SQL就能得到预期的排序结果。
内容的提问来源于stack exchange,提问作者Azianese
相关产品推荐
相关产品推荐

