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