sql - 如何根据多列按行排序
问题描述
我有这个要排序的记录表列表。
其中 MAIN_NAME 是父亲的名字,STUDENT_NAME 是他们儿子/女儿的名字。如果记录是父亲本身,则为空值,并且 IDENTIFIER 其中 1 表示数据是父亲实体,而 2 是学生。
我试过在 CREATED_DATE,MAIN_NAME 之前订购它们。但是标识符为 1 的所有记录都将位于标识符为 2 的所有记录之上。
也尝试过 MAIN_NAME,CREATED_DATE。但 MAIN_NAME=ANDREW 将比 Joseph 更早进入,后者比前者注册得更早。
我有点困惑,因为日期都是独一无二的。
这应该是预期的结果。
记录应按 CREATED_DATE 排序,但学生仍应标记在其父亲的 (MAIN_NAME) 记录下。
解决方案
您可以在order by
. 所以,我想你想要父母的创建日期,然后是孩子,然后是在那个父母下的顺序。
您可以使用:
order by min(case when student_name is null then registration_date end) over (partition by main_name),
main_name,
(case when student_name is null then 1 else 2 end),
registration_date
逻辑是:
- 按“主要”注册日期升序排列;
- 如果日期有关系,请按 订购
main_name
。 - 然后确保“主要名称”记录首先出现。
- 然后按子记录排序。
推荐阅读
- sql-server - 计算每个状态花费的时间
- java - spurios 唤醒是否伴随着 InterruptedException?
- angular - 可以取消 HttpClient GET 请求吗?
- jenkins - 詹金斯收到错误 java.lang.IllegalStateException: 关闭
- android - 添加崩溃报告框架以响应本机应用程序
- ios - 谷歌地图整个世界地图适合屏幕(0 Zioom 级别) - IOS
- image - 在 chart.js 中的条形图中添加图像
- svn - Tortoise SVN 像 Perforce 中的文件叠加
- boost - cmake undefined zlib 问题中的静态链接 boost
- r - 如何修复 rintrojs 模态在本地工作但在部署到 shinyapps.io 时失败