左半边(图)是默认的一个排序,想要排成右半边(图)这种,最新的在最前面,但是这段SQL就是不对。

image.png

FineReport 帆软用户VQHkSnUE2a 发布于 2025-2-23 10:04
1min目标场景问卷 立即参与
回答问题
悬赏:3 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共4回答
最佳回答
0
CD20160914Lv8专家互助
发布于2025-2-23 10:35

右边最新的在最前面??怎么没有懂这个规则2024的怎么排在第二个?你这个是什么规则?

  • 帆软用户VQHkSnUE2a 帆软用户VQHkSnUE2a(提问者) 整体是按照日、周、月、季度、年,然后再单独对日、周、月、季度、年进行排序,所有看到的就是2025在第一,2024在第二,这两个是代表年的嘛!
    2025-02-23 10:59 
  • CD20160914 CD20160914 回复 帆软用户VQHkSnUE2a(提问者) 那你先判断一下关键字,里面有W是周,返回一个你要的数字,有Q的返回一个你要的数字,然后子查询后再排序就行了 select * from (你的sql语句,把判断的写出来) order by 排序判断列
    2025-02-23 11:33 
最佳回答
0
Z4u3z1Lv6专家互助
发布于2025-2-23 10:36

字符串排序参考https://help.fanruan.com/finereport/doc-view-3622.html

  利用内置数据集实现自定义排序 sql server的实现方式: Select * From Product Where id in (1,1588,15782,9887,54)  Order By charindex(','+ id +',', ',1,1588,15782,9887,54,') mysql的实现方式: SELECT * FROM EVENT WHERE eventId IN(443,419,431,440,420,414,509)  ORDER BY INSTR(',443,419,431,440,420,414,509,',CONCAT(',',eventId,',')) oracle的实现方式: select name from order where oderid in(111,222,333,444,555,666)order by instr('111,222,333,444,555,666',orderid)

最佳回答
0
大林3143511Lv5中级互助
发布于2025-2-23 15:33

右侧的排序,可以总结为:

第一层(年、季度、月、周、日)由大范围到小范围排序;

第二层(每一层中最新的数据排第一位)

建议按照这样的思路尝试:

1)将每一种数据找出并单独排序;

2)再利用union函数,将查询到结果集合并。

例如查询年数据,

...where length(datetype) = 4 order by datetype desc

union

...where  CHARINDEX('Q', datetype) > 0 order by datetype desc

其余类似

希望可以帮到你

最佳回答
0
iQianLv4见习互助
发布于2025-2-24 10:35(编辑于 2025-2-24 10:59)

实际是按时间进行倒序:

1、如果,你最终需要的是在展示报表的时候是这种排序,可以写多个数据集:日、周、月、季度、年各一个数据集。把数据分别拖到报表里展示即可。

2、如果,是纯SQL,建议用union。 

3、还有一个方法:拼前缀,增加一个自定义的排序列。此列的值是:定好的数字或字母 拼接datetype的值组成。如

年 拼接成 99-2025,99-2024

季 拼接成 98-2025Q1, 98-2025Q2

月 拼接成 97-202502

周 拼接成 97-2025W03

。。。。

这样直接倒序排列就可以了。

  • 4关注人数
  • 45浏览人数
  • 最后回答于:2025-2-24 10:59
    请选择关闭问题的原因
    确定 取消
    返回顶部