AWS Athena SQL进行分组,并以不同的行找到最小值



我对AWS雅典娜有一个查询,其核心效果很好。我的公司代码是AA(现场ACD),我们的竞争对手代码是BB,CC和DD(FIELD 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

然而,最后一步是借助援助分组,并仅选择每个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

总共返回三个记录,因此我无法正确设置分组。脑耗尽了,所以不确定还要尝试什么。

您需要每个辅助 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

这不会是一个非常有效的查询,但应该起作用。通过将AIDOCD拉动最小DELMN组的查询(而不是使用为每行运行的子选择),它可以更有效地效率。这样,它只需要一次扫描这些表即可。除非您有很多行,否

相关内容

  • 没有找到相关文章

最新更新