假设我有一个名为extable
的表
|--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栏对其进行排序,如下所示:
|--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列中的时间戳将是最新的yes
和no
条目。我想解释一下,这比上面的例子要有效得多。
我知道我可以这样做:ORDER BY column B, column C, column A;
,但这将从原始表中提取每个条目。如果这有意义的话,我只想在A列的时间戳前得到最新的。注意9-1
是如何在原始表中有四个条目的,但是只为它提取了最新的yes
和no
选项。
谢谢
发布于 2016-04-27 13:22:40
您有两个要求: 1)按列出的结果排序,2)只为每一列"B“保留最新的是/否值
ORDER BY
子句非常简单。唯一的更改是在子句中的C
字段后面粘贴"DESC“,以便yes
首先出现。
第二个需求可以使用一个窗口函数来由B
和C
对结果集中的行进行分组,然后通过对每个组中的结果编号的A
对其进行排序。然后我们只保留任何排名为1
的
下面这样的东西应该能起作用:
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
https://stackoverflow.com/questions/36890969
复制相似问题