mysql如何进行多值排序
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql如何进行多值排序相关的知识,希望对你有一定的参考价值。
数据库表结构:
Date
Time
Date保存的是日期或时间戳,2.Time保存的是 1或者2, 表示上下午.
(日期和时间因代码逻辑所需,不方便统一成时间戳, 需要分开保存)
排序要求是:
日期最早的排在最前,同一日期上午优先,下午其后.
打个比方:
Date Time
2014-6-3 1(上午)
2014-6-1 2(下午)
2014-6-2 2(上午)
排序需求如下:
2014-6-1 下午
2014-6-2 上午
2014-6-3 上午
已经尽可能描述得很清晰了,希望懂的朋友们提示一下,如何写SQL的select语句
这样只能按照日期排序,不能符合 同一日期上午优先的要求啊
追答可以将时间转换为时间戳排序
参考技术D Order by Date ASC,Time ASC本回答被提问者采纳对按分量多值 (SIMD) 数组进行排序
【中文标题】对按分量多值 (SIMD) 数组进行排序【英文标题】:sorting component-wise multi value (SIMD) array 【发布时间】:2015-05-26 09:34:42 【问题描述】:我正在尝试找到一种O(n∙log(n))
排序方法来同时对多个数组进行排序,以便多值数组中的元素将代表来自 4 个不同单值数组的元素,并且排序方法将对多值元素进行排序.
例如:
对于给定的 4 个单值数组 An
、Bn
、Cn
和 Dn
,
我会设置一个新数组 Qn
这样Qᵢ = [ Aᵢ Bᵢ Cᵢ Dᵢ ]
.Qᵢ
可以在此过程中更改,以便Qᵢ = [ Aaᵢ Bbᵢ Ccᵢ Ddᵢ ]
其中aᵢ
、bᵢ
、cᵢ
和dᵢ
是索引列表
当然还有Qᵢ ≤ Qᵢ₊₁ = [ Aaᵢ₊₁ Bbᵢ₊₁ Ccᵢ₊₁ Ddᵢ₊₁ ]
、Aaᵢ ≤ Aaᵢ₊₁
、Bbᵢ ≤ Bbᵢ₊₁
等等。
动机当然是使用 SIMD 指令来受益于这种结构来分别对 4 个数组进行排序。
我尝试使用 SIMD 比较器(例如_mm_cmplt_ps
)和掩码交换(例如_mm_blendv_ps
)
制作传统排序算法的修改版本(快速排序、堆排序、合并排序等)
但我总是遇到理论上决策树中似乎有O(n∙log(n))
步骤的问题。
因此,决定是否设置枢轴(快速排序)或是否将父级与其其中一个子级交换(堆排序)
对于所有 4 个组件同时在一起是不正确的(因此,下一步 - 向右或向左 - 是不正确的)。
目前我只有 O(n²)
方法有效。
有什么想法吗?
【问题讨论】:
相关:vldb.org/pvldb/1/1454171.pdf @PaulR n 被认为非常大(非常密集的网格的坐标)。我之前处理过这篇文章。它谈到了一般排序(SIMD 结构中的单个数组) @PaulR,这看起来像是我需要阅读的一篇有趣的论文。谢谢! 【参考方案1】:听起来sorting network 是您所问问题的答案,因为比较器的位置不依赖于数据。 Batcher's bitonic mergesort 是 O(n log2 n)。
【讨论】:
谢谢!这当然是我一直在寻找的以上是关于mysql如何进行多值排序的主要内容,如果未能解决你的问题,请参考以下文章