首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >按多列排序SQL表

按多列排序SQL表
EN

Stack Overflow用户
提问于 2016-04-27 13:16:00
回答 1查看 225关注 0票数 0

假设我有一个名为extable的表

代码语言:javascript
运行
复制
|--A--|--B--|--C--|
|-----|-----|-----|
|01:21| 4-1 | no  |
|01:28| 4-2 | yes |
|05:53| 3-5 | yes |
|03:34| 9-1 | yes |
|18:48| 9-1 | yes |
|13:01| 9-1 | yes |
|00:17| 7-4 | yes |
|14:24| 4-1 | no  |
|18:19| 4-1 | yes |
|08:02| 7-4 | yes |
|15:21| 7-4 | no  |
|21:23| 3-5 | no  |
|02:57| 4-2 | no  |
|21:03| 4-2 | yes |
|11:31| 4-1 | no  |

我将如何按照时间、A栏、B栏、C栏对其进行排序,如下所示:

代码语言:javascript
运行
复制
|--A--|--B--|--C--|
|-----|-----|-----|
|05:53| 3-5 | yes |
|21:23| 3-5 | no  |
|18:19| 4-1 | yes |
|14:24| 4-1 | no  |
|21:03| 4-2 | yes |
|02:57| 4-2 | no  |
|08:02| 7-4 | yes |
|15:21| 7-4 | no  |
|18:48| 9-1 | yes |
|21:56| 9-1 | no  |

我希望能够按B列中的最低到最高排序,然后,我希望yes在B列的每个条目的no选项之前,A列中的时间戳将是最新的yesno条目。我想解释一下,这比上面的例子要有效得多。

我知道我可以这样做:ORDER BY column B, column C, column A;,但这将从原始表中提取每个条目。如果这有意义的话,我只想在A列的时间戳前得到最新的。注意9-1是如何在原始表中有四个条目的,但是只为它提取了最新的yesno选项。

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-04-27 13:22:40

您有两个要求: 1)按列出的结果排序,2)只为每一列"B“保留最新的是/否值

ORDER BY子句非常简单。唯一的更改是在子句中的C字段后面粘贴"DESC“,以便yes首先出现。

第二个需求可以使用一个窗口函数来由BC对结果集中的行进行分组,然后通过对每个组中的结果编号的A对其进行排序。然后我们只保留任何排名为1

下面这样的东西应该能起作用:

代码语言:javascript
运行
复制
SELECT A,B,C
FROM
    (
        SELECT 
            A,
            B,
            C,
            ROW_NUMBER() OVER (PARTITION BY B, C ORDER BY A DESC) as keeprank
        FROM <table>
    ) t1
WHERE keeprank = 1
ORDER BY A, B, C DESC
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36890969

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档