Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >按日期降序对父行进行排序,子行在每个日期下独立排序

按日期降序对父行进行排序,子行在每个日期下独立排序
EN

Stack Overflow用户
提问于 2012-08-08 03:31:50
回答 1查看 444关注 0票数 3

这是我的表模式的一个人为的版本,用来说明我的问题:

QuoteID,详细信息,DateCreated,ModelQuoteID

其中QuoteID是主键,ModelQuoteID是返回到该表的一个可以为空的外键,以表示根据另一个报价建模的报价(并且可能随后更改了其详细信息列等)。

我需要返回一个按DateCreated降序排序的报价列表,除了建模报价,它应该位于其父报价下面,在任何其他兄弟报价中按日期降序排序(报价只能建模一层深)。

例如,如果我有这4行引号:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1, 'Fix the roof', '01/01/2012', null
2, 'Clean the drains', '02/02/2012', null
3, 'Fix the roof and door', '03/03/2012', 1
4, 'Fix the roof, door and window', '04/04/2012', 1
5, 'Mow the lawn', '05/05/2012', null

然后,我需要按以下顺序返回结果:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
5 - Mow the lawn
2 - Clean the drains
1 - Fix the roof
4 - -> Fix the roof, door and window
3 - -> Fix the roof and door

我还传入了搜索条件,例如用于详细信息的关键字,并且即使它们不包含搜索词,但它们的父引用确实包含,我也会返回模型化的引用。我使用一个公用表表达式来获得原始引用,并将其与模型引用的连接结合在一起。

这很好用,但目前我必须将建模的引号重新排列为代码中的正确顺序。这并不理想,因为我的下一步是在SQL中实现分页,如果当时没有正确地对行进行分组,那么我就不会让当前页面中的子页面在代码中进行重新排序。一般来说,它们无论如何都会自然地组合在一起,但并非总是如此。您现在可以为一个月前的报价创建模型报价。

我在这上面花了不少时间,SQL专家能帮上忙吗?非常感谢。

编辑:以下是我的SQL的人工版本,以适合我的人工示例:-)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
;with originals as (
select
    q.*
from
    Quote q
where
    Details like @details
)
select
    *
from
(
select
    o.*
from
    originals o

union

select
    q2.*
from
    Quote q2
join
    originals o on q2.ModelQuoteID = o.QuoteID
)
as combined

order by
    combined.CreatedDate desc
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-08-08 04:58:51

看着奥运会--只是浏览一下你的帖子--看起来你想要控制每个级别(根和一个级别)的排序,并确保返回的数据直接在其父数据下的子项(这样您就可以对数据进行分页...)。我们一直都在这么做。您可以向每个内部查询添加一个order by并创建一个sort列。我设计了一个稍微不同的示例,您可以轻松地将其应用到您的环境中。我对根的升序和第一级的降序进行了排序,只是为了说明如何控制每个部分。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
declare @tbl table (id int, parent int, name varchar(10))

insert into @tbl (id, parent, name)
values (1, null, 'def'), (2, 1, 'this'), (3, 1, 'is'), (4, 1, 'a'), (5, 1, 'test'),
       (6, null, 'abc'), (7, 6, 'this'), (8, 6, 'is'), (9, 6, 'another'), (10, 6, 'test')

;with cte (id, parent, name, sort) as (
  select id, parent, name, cast(right('0000' + cast(row_number() over (order by name) as varchar(4)), 4) as varchar(1024))
  from   @tbl
  where  parent is null

  union all

  select t.id, t.parent, t.name, cast(cte.sort + right('0000' + cast(row_number() over (order by t.name desc) as varchar(4)), 4) as varchar(1024))
  from   @tbl t inner join cte on t.parent = cte.id
)
select * from cte
order by sort

这会产生以下结果:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
id    parent    name     sort
----  --------  -------  ----------
6     NULL      abc      0001
7     6         this     00010001
10    6         test     00010002
8     6         is       00010003
9     6         another  00010004
1     NULL      def      0002
2     1         this     00020001
5     1         test     00020002
3     1         is       00020003
4     1         a        00020004

您可以看到根节点是按升序排序的,内部节点是按降序排序的。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11857295

复制
相关文章
oracle:db-link使用
二个oracle instance,如果需要在一个instance上,直接查询另一个instance上的数据,就要用到db-link 创建: create public database link 链接名 connect to 用户名 identified by 密码 using '(DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 服务器IP)(PORT = 1521)) (CONNECT_DATA = (S
菩提树下的杨过
2018/01/19
5310
如何使用ELK Stack分析Oracle DB日志
随着业务的发展,服务越来越多,相应地,日志的种类和数量也越来越多。一般地,我们会用grep、awk,或者编写脚本进行日志分析。对于多个服务构成的系统,需要人为把这些日志分析工作有机地结合起来。在业务系统组件多而组件间关联复杂的情况下,这种分析方法效率十分低下,一个日志分析平台极为必要。从日志的整合和展示看,日志分析平台主要由两部分构成,一是日志整合系统,负责把各组件日志集中并索引起来,以方便快速的搜索和分析,这可以用ELK开源软件进行搭建;二是日志分析展示系统,对各类日志提供尽可能多的自动化分析和评估报表,这需要辨识并固化尽可能多的日志分析的行为模式。这些都基于对ELK的认识和对业务系统各组件日志的理解。
王录华
2019/07/31
2.7K0
如何使用ELK Stack分析Oracle DB日志
【DB笔试面试519】在Oracle中,什么是Oracle Directory?
Oracle Directory(目录)可以让用户在Oracle数据库中灵活地对文件进行读写操作,极大地提高了Oracle的易用性和可扩展性。其语法如下所示:
AiDBA宝典
2019/09/29
8730
【DB笔试面试860】在Oracle中,如何判断Oracle是32位还是64位?
由于Oracle分为客户端和服务器端,所以,查看Oracle是32位还是64位也分为服务器端和客户端2个部分。
AiDBA宝典
2020/08/20
1.2K0
【DB笔试面试860】在Oracle中,如何判断Oracle是32位还是64位?
使用KVM克隆用于Oracle DB的主机
首先,通过现有的vm1「在上篇文章 使用KVM创建OEL虚拟机 已创建」克隆出一个vm,名字叫做db1,然后修改一些配置,使其更适用于Oracle DB的主机。
Alfred Zhao
2023/01/08
7370
和我从头学SQL Server Integration Services
本人一个IT屌丝男,一直在ITPRO的圈子里面混着,从来不是一个程序猿,水平就是开开关关windows的水平。昏昏然,成了一个油腻的大叔,但我的内心和业务水平还是停留在26岁啊! 周围的同事好友一个个都一日千里的学习进步着,实在看不下去自己了,决定整理整理,给自己,给儿子摆一个努力学习的POSE出来。
盆盆
2019/04/24
3.3K0
和我从头学SQL Server Integration Services
Oracle|创建 DB Link
dblink主要用于不同服务器数据库之间的关联操作。比如:想在A服务器之间从B服务器某表中取得数据,更新到A服务器某表中。
Java小技巧
2022/05/23
1.2K0
Oracle|创建 DB Link
Oracle DB Time 解读
Oracle DB Time是Oracle数据库在时间维度上剖析性能的一个重要指标,通过逐级分解该指标,定位到浪费资源或者资源争用的首要事件上,从而通过减少等待以及最小化每个请求的使用资源来达到优化的目的。本文主要讲述Oracle DB Time,以及给出示例演示Oracle DB Time。
Leshami
2018/09/20
1.3K0
Oracle DB Time 解读
【DB笔试面试863】在Oracle中,如何让Oracle DB、监听和oem开机启动?
【DB笔试面试863】在Oracle中,如何让Oracle DB、监听和oem开机启动?
AiDBA宝典
2020/08/27
2.6K0
【DB笔试面试863】在Oracle中,如何让Oracle DB、监听和oem开机启动?
【DB笔试面试533】在Oracle中,如何在Windows下查看Oracle的进程?
由于Windows采用的是单进程多线程的模式,因此,Oracle一旦启动,在任务管理器里只能看到一个ORACLE.EXE的进程。如果想要查看Oracle的各个后台进程(Linux系统下的称谓),例如PMON、SMON、DBWn、LGWR、CKPT等,那么可以通过如下几个步骤实现:
AiDBA宝典
2019/09/29
1.5K0
【DB笔试面试533】在Oracle中,如何在Windows下查看Oracle的进程?
【DB笔试面试695】在Oracle中,什么是Oracle RDA(Remote Diagnostic Agent)工具?
在Oracle中,什么是Oracle RDA(Remote Diagnostic Agent)工具?
AiDBA宝典
2019/11/28
5060
【DB笔试面试743】在Oracle中,如果$ORACLE_HOME/bin/oracle文件的属主或权限出了问题,该如何修复呢
在Oracle中,如果oracle用户下的$ORACLE_HOME/bin/oracle文件的属主或权限出了问题,那么该如何修复呢?
AiDBA宝典
2020/02/24
1.6K0
【DB笔试面试562】在Oracle中,如何监控索引的使用状况?
在开发应用程序时,可能会建立很多索引,那么这些索引的使用到底怎么样,是否有些索引一直都没有用到过,在这种情况下就需要对这些索引进行监控,以便确定它们的使用情况,并为是否可以清除它们给出依据。
AiDBA宝典
2019/09/29
1.3K0
【DB笔试面试562】在Oracle中,如何监控索引的使用状况?
通过Oracle DB了解MySQL
Oracle数据库是业界的翘楚,各行各业拥有大量的Oracle DB的DBA,本文尝试通过将Oracle与MySQL数据库的架构、安全、模式对象、数据类型及数据存储进行对比,以方便熟悉Oracle数据库的人可以快速了解MySQL。
MySQLSE
2020/09/28
1.9K0
通过Oracle DB了解MySQL
Oracle:创建db_link
global_name也就是数据库的全局数据库名,可已使用select * from global_name;查询:
williamwong
2018/07/24
5320
Oracle:创建db_link
【DB笔试面试675】在Oracle中,如何快速复制表或插入数据?
快速插入数据可以指定APPEND提示,需要注意的是,在NOARCHIVELOG模式下,默认用了APPEND就是NOLOGGING模式的。在ARCHIVELOG下,需要把表设置程NOLOGGING模式。如:
AiDBA宝典
2019/11/05
1.2K0
【DB笔试面试725】在Oracle中,什么是GPnP?
网格即插即用(Grid Plug and Play,GPnP)是Oracle 11gR2 RAC提供的新组件,该组件的功能由gpnpd.bin守护进程实现。GPnP可以提供一个动态的GI环境,能随着负载的增加而动态改变GI环境。GPnP能非常容易地添加、替换或者移除集群中的节点,就像电源插头一样即插即用。
AiDBA宝典
2020/01/20
1.7K0
【DB笔试面试817】在Oracle中,什么是ASH?
ASH(Active Session History,活动会话历史信息)、AWR(Automatic Workload Repository,自动负载信息库)、ADDM(Automatic Database Diagnostic Monitor,数据库自动诊断监视工具)是Oracle性能调整的三把利剑,需要深入地了解,但是面试一般都问得比较简单,主要问到的是AWR。
AiDBA宝典
2020/06/17
1.4K0
【DB笔试面试721】在Oracle中,什么是OLR?
OCR是用于保存CRSD所管理的资源的注册表,但是在CRSD启动之前集群还有很多初始化资源(例如ASM实例)需要启动,所以,只有OCR是不够的。因此,Oracle在11gR2版本中推出了另一种注册表OLR(Oracle Local Registry,Oracle本地注册表)。OLR类似于Oracle集群注册表,但是OLR只存储与本地节点有关的信息。OLR不与集群中的其它节点共享。OLR存储了集群启动初期ohasd(Oracle High Availability Service)使用的重要环境,如Oracle集群件的版本、配置等。如果OLR丢失或损坏,那么将会导致ohasd进程启动失败。所以,OLR的主要作用就是为ohasd守护进程提供集群的配置信息和初始化资源的定义信息。
AiDBA宝典
2020/01/20
1.1K0
【DB笔试面试721】在Oracle中,什么是OLR?
【DB笔试面试839】在Oracle中,如何限定特定IP访问数据库?
② 当触发的对象类型为DATABASE的时候,登录用户不能拥有“ADMINISTER DATABASE TRIGGER”的系统权限;当触发的对象类型为“用户名.SCHEMA”的时候,登录用户不能拥有“ALTER ANY TIGGER”的系统权限。否则,这些用户还是会正常登录到数据库,只是将相应的报错信息写入到告警日志中。所以,拥有IMP_FULL_DATABASE和DBA角色的用户以及SYS和EXFSYS用户将不能通过这种方式限制登录。
AiDBA宝典
2020/07/16
1.5K0

相似问题

多个顺序api调用RxJs

29

角解析Rxjs映射和订阅多个APIs

11

在RxJS中组合多个http调用

123

使用rxjs shareReplay防止多个api调用

17

基于多个依赖API调用的RXJS

12
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文