【发布时间】:2021-12-31 16:29:44
【问题描述】:
我正在尝试为每张尚未被选为以前发票的最低文档等级的发票选择最低文档等级。为此,我认为我需要知道所有 invoicerank
这是 2 个客户端的数据集示例:
clientid invoicerank documentrank documentdate
1 1 1 04/10/2021
1 1 2 03/03/2021
1 1 3 02/01/2021
1 2 1 04/10/2021
1 2 2 03/03/2021
1 2 3 02/01/2021
1 3 1 04/10/2021
1 3 2 03/03/2021
1 3 3 02/01/2021
2 1 null null
2 2 1 06/22/2021
2 2 2 05/04/2021
2 3 1 06/22/2021
2 3 2 05/04/2021
这就是我希望结果的样子:
clientid invoicerank documentrank documentdate
1 1 1 04/10/2021
1 2 2 03/03/2021
1 3 3 02/01/2021
2 1 null null
2 2 1 06/22/2021
2 3 2 05/04/2021
编辑:对于此数据集,每个现有文档都有一行可以应用于每张发票。在另一个表中选择了 documentrank,它是 dense_rank() OVER(PARTITION BY clientid ORDER BY documentdate DESC)。如果 documentrank 为空,则意味着没有可应用于该发票的现有文档。因此,对于每张发票,我想要尚未被选为任何先前发票等级的最低文档等级的最低文档等级。因此,对于 clientid=1 和 invoicerank = 2,我想选择未选择为 invoicerank=1 的最低文档等级的最低文档等级。所以 invoicerank=1 选择 1 作为最小值。 Invoicerank=2 也会选择 documentrank=1 作为最小值,但由于已经为 invoicerank=1 选择了它,我希望它选择 documentrank=2。
Edit2:我正在使用 Zoho Analytics 进行此查询。这限制了我只能使用 select 语句,并且只有 1 级嵌套子查询。窗口函数内部也不支持 case-whens。也不支持相关的子查询。
【问题讨论】:
-
解释你的例子。为什么是那些行?还有你用的是哪个数据库?
-
@drum 我编辑了!