我的查询类似于
SELECT
a, b, c, d
FROM
tab
ORDER BY
a ASC, b ASC
我的结果集看起来像
+-----------------------+
| a | b | c | d |
+-----------------------+
| A1 | B1 | X | null|
| A1 | B2 | X | null|
| A1 | B3 | X | null|
| A1 | B4 | X | date|
| A2 | B1 | X | null|
| A2 | B2 | X | null|
| A2 | B3 | X | null|
| A2 | B4 | X | date|
...
其中X
可以是任何东西(这里无关紧要)。我想在列A1
中按日期排序A2
,d
等块,而不更改块之间的顺序(以便B1
仍然在B2
之前,...)。
有什么建议吗?或者这种做法是否朝着错误的方向发展?
答案 0 :(得分:1)
如果我猜你正确想要按MAX(D)
为整个块(或MIN(d)?)排序块。
然后尝试此查询:
SELECT T.*
FROM T
JOIN (SELECT a, MAX(d) as maxD
FROM T
GROUP BY a) as T1
ON T.a=T1.a
ORDER BY T1.maxD,T.a,T.b
答案 1 :(得分:0)
这应该 更简单,max()
ORDER BY
中SELECT *
FROM tbl
ORDER BY max(d) OVER (PARTITION BY a), a, b;
为window function:
{{1}}