假设我有一个名为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 DESChttps://stackoverflow.com/questions/36890969
复制相似问题