当前位置: 首页 > 知识库问答 >
问题:

SQL按复杂排序

梅耘豪
2023-03-14

我有下表在OracleSQL方言(被调用与一些java代码)

Part # | Locker # | Serial # | Description
  1         1          1       Alpha
  1         1          1       Beta
  1         1          1       Gamma
  2         1          15      Alpha
  2         7          17      Gamma
  2         7          21      Beta

我正在寻找一种方法来进行以下分类:

将part、locker、serial#组合在一起,并在每个组内按升序或降序对描述进行排序,同时确保每个组的第一条记录也按升序或降序正确排序(冲突应按part、locker、serial的所需顺序排序)。例如:

排序DESC将产生:

Part # | Locker # | Serial # | Description
  2         7          17      Gamma

  1         1          1       Gamma
  1         1          1       Beta
  1         1          1       Alpha

  2         7          21      Beta

  2         1          15      Alpha

如何实现这种复杂的排序类型?仅仅通过查询就可以吗?

共有1个答案

周学义
2023-03-14

有趣的挑战是,需要按3个字段分组,并为组选择最高的描述,将其保留在查询中进行排序。。。。美好的

我已经尝试过了,在2008年的MS-SQL可以在http://sqlfiddle.com/#看到!3/422d2/10使用MS T-SQL排名函数可能有一个更简单的方法,但是这个派生组表应该很容易在其他SQL中实现。

这似乎给出了您需要的排序顺序:

SELECT
  p1.*, Groups.GMaxDescr
FROM Parts p1 INNER JOIN 
  (SELECT
     p2.Part AS GPart,
     p2.Locker AS GLocker,
     p2.Serial AS GSerial,
     Max(p2.Descr) as GMaxDescr
   FROM Parts p2
   GROUP BY Part, Locker, Serial
  ) AS Groups  -- derived table of Groups with First (Max() for DESC) Name 
      -- join original rows with the Groups data for sorting
       ON p1.Part = Groups.GPart
      AND p1.Locker=Groups.GLocker
      AND p1.Serial=Groups.GSerial
ORDER BY Groups.GMaxDescr DESC,
         Part DESC,
         Locker DESC,
         Serial DESC
 类似资料:
  • 下面是数组上HEAPSORT的伪代码 很明显,BUILD-MAX-HEAP的复杂度为O(n),MAX-HEAPIFY的复杂度为O(h),其中h是具有最大logn值的堆的高度。 我不完全理解的是为什么HeapSort有nlogn的复杂性。我知道我们有n次迭代,每次迭代都有一个MAX-HEAPIFY。但是他MAX-HEAPIFY调用在每次迭代中都得到一个大小递减的HEAP。那么为什么每次迭代都有O(l

  • 问题内容: 我想在主要评论之后显示最新评论及其回复。显然,答复将具有最新日期,因此我无法按日期对日期进行排序,因为答复将位于主要日期之上。我不确定如何通过一个查询正确执行此操作。任何想法都可以。 数据库转储:http : //pastie.org/576963 问题答案: 我猜文章的“回复ID”为0,评论的文章号为。如果这是您的设计,这应该可以工作: 添加: 感谢您在评论中提供其他信息。将结果按所

  • 什么是 Nutz.Dao 中的复杂SQL条件 对于 Nutz.Dao 来说,它本质上就是将你的 Java 对象转化成 SQL,然后交给 JDBC 去执行。 而 SQL 中,当执行数据删除和查询操作时,最常用的就是 WHERE 关键字。 WHERE 关键字后面的就是所谓的复杂查询条件 Nutz.Dao 将如何如何使用这个条件 Dao 接口的 clear 方法和 query 方法的第二个参数,就是为了

  • 问题内容: Python的复杂性是什么?Python是否检查给定的iterable是否已排序,还是我必须自己做?我在文档中的任何地方都找不到它。 问题答案: 这 完全 取决于实现。python保证的是内置排序算法是 稳定的 (比较相等的元素保留其相对顺序)。如果要实现,甚至可以使用稳定的冒泡排序。 Cpython使用TimSort(插入排序的合并排序合并),如果输入已经排序,我相信它具有O(N)的

  • 如何将这个复杂的sql语句更改为JPQL? 这是否可以在JPQL表单中显示?

  • 问题内容: 我有以下查询,该查询基于逗号分隔的列表返回行 我希望此查询的结果以ID在列表中的顺序返回。SQL可以做到吗? 提前致谢 问题答案: 如果您需要输出以特定顺序显示,则需要使用服务器可以排序的内容来指定该顺序。不知道您要使用哪个引擎,一般的方案是创建一个临时表或使用行集构造函数将每个记录ID与所需的排序顺序配对。 例如(SQL Server)