DB2 Grouping и Orderby - PullRequest
       10

DB2 Grouping и Orderby

0 голосов
/ 20 января 2020

Мне нужно упорядочить результаты по PUNCH_TS, но сохранить группировку TYPE_CD.

Запрос:

select TYPE_CD, PUNCH_TS 
from PUNCH
group by PUNCH_TS, TYPE_CD 
order by TYPE_CD, PUNCH_TS asc

Результат:

ADM 2020-01-13 12:00:00.0
ADM 2020-01-13 17:00:00.0
REG 2020-01-13 08:00:00.0
REG 2020-01-13 12:00:00.0

Я изменил порядок с TYPE_CD на PUNCH_TS, но затем теряет группировку TYPE_CD:

REG 2020-01-13 08:00:00.0
ADM 2020-01-13 12:00:00.0
REG 2020-01-13 12:00:00.0
ADM 2020-01-13 17:00:00.0

Что мне нужно, это:

REG 2020-01-13 08:00:00.0
REG 2020-01-13 12:00:00.0
ADM 2020-01-13 12:00:00.0
ADM 2020-01-13 17:00:00.0

1 Ответ

2 голосов
/ 20 января 2020

Это должно сделать это:

order by TYPE_CD desc, PUNCH_TS

Обоснование: если вы хотите, чтобы TYPE_CD 'REG' появлялся до 'ADM', то вам нужна сортировка по убыванию. Вторым критерием сортировки является возрастание PUNCH_TS, поэтому вы получаете результаты, упорядоченные по возрастанию отметки времени внутри групп, имеющих одинаковые TYPE_CD.


Редактировать

Если Вы хотите TYPE_CD, который сначала имеет более раннюю временную метку, затем вы можете использовать оконные функции:

order by min(PUNCH_TS) over(partition by TYPE_CD), PUNCH_TS
...