AWS Athena SQL для группировки и поиска минимума в разных строках - PullRequest
0 голосов
/ 19 марта 2019

У меня запрос к AWS Athena, и ядро ​​его прекрасно работает.Код моей компании - AA (поле ACD), а коды наших конкурентов - BB, CC и DD (поле OCD).Так что за каждую отдельную поездку, которую совершает моя компания, я получаю серию подобных поездок от конкурентов.Я получаю таблицу, подобную этой:

main =

AID ATRIPDT     ACD ACAR    CY1 CY2 OID OTRIPDT     OCD BCAR DELMN
0   10/30/2018  AA  XX22    LAS LAX 300 10/30/2018  BB  ZZ1 21
0   10/30/2018  AA  XX22    LAS LAX 544 10/30/2018  CC  T09 36
0   10/30/2018  AA  XX22    LAS LAX 755 10/30/2018  BB  KLQ 57
0   10/30/2018  AA  XX22    LAS LAX 912 10/30/2018  DD  75Q 5

1   10/30/2018  AA  P700    LAS LAX 390 10/30/2018  BB  MNZ 13
1   10/30/2018  AA  P700    LAS LAX 603 10/30/2018  BB  JJ1 30

Однако последний шаг - сгруппировать по AID и выбрать только одну запись для каждого OCD, которая должна быть минимальным значением.DELMN.

В этом случае я ищу это в результате:

AID ATRIPDT     ACD ACAR    CY1 CY2 OID OTRIPDT     OCD BCAR DELMN
0   10/30/2018  AA  XX22    LAS LAX 300 10/30/2018  BB  ZZ1 21
0   10/30/2018  AA  XX22    LAS LAX 544 10/30/2018  CC  T09 36
0   10/30/2018  AA  XX22    LAS LAX 912 10/30/2018  DD  75Q 5

1   10/30/2018  AA  P700    LAS LAX 390 10/30/2018  BB  MNZ 13

Я попытался это

with main as
(
    <complex query that returns main table>
)
select * from main
where DELMN = (select min(DELMN) from main as b where b.OCD=main.OCD

, который возвращает в общей сложности три записи, такЯ не настраиваю группировку правильно.Мозг истощен, поэтому не уверен, что еще можно попробовать.

1 Ответ

0 голосов
/ 19 марта 2019

Вам нужна одна строка для каждого значения AID + OCD, поэтому вам нужно что-то вроде:

WITH main AS
(
    <complex query that returns main table>
)
SELECT *
FROM main
WHERE DELMN = (SELECT MIN(DELMN) 
               FROM main AS b 
               WHERE b.OCD=main.OCD AND b.AID = main.AID)
GROUP BY AID, OCD

Это не будет очень эффективный запрос, но он должен работать.Это может быть более эффективным, если присоединиться к запросу, который вытягивает минимальную группу DELMN на AID и OCD (вместо использования подвыбора, который выполняется для каждой строки).Таким образом, нужно только один раз отсканировать эти таблицы.Не беспокойтесь об этом, если у вас много строк, что замедляет его.

...