gpt4 book ai didi

excel - 获取多个唯一值,而不分离属于同一值 block 的值

转载 作者:行者123 更新时间:2023-12-01 00:56:41 24 4
gpt4 key购买 nike

我可以使用 PL/SQL 解决方案或 Access VBA/Excel VBA(尽管 Access VBA 优于 Excel VBA)之一。所以,PL/SQL 是第一选择,Access VBA 是第二,Excel VBA 是第三。

这是一个很难解释的问题。请提出任何问题,我会尽力清楚地回答。

我在一个名为 NR_PVO_120 的表中有以下数据集。我如何在不排除任何传真号码下的任何 OtherID 的情况下挑选唯一的其他 ID 的数字(可以更改但比方说 6)?

因此,如果您从第 7 行中选择 OtherID,那么您还必须从第 8 行和第 9 行中选择 OtherID,因为它们具有相同的传真号码。基本上,一旦您选择了OtherID,您就有义务选择与您选择的具有相同传真号码的所有OtherID。

如果请求的数字(本例中为 6)是不可能的,那么“可能的最接近但不超过的数字”将是规则。

例如,如果您从第 1-10 行获取 OtherID,您将获得 6 个唯一的 OtherID,但第 10 行与第 11 行和第 12 行共享一个传真。您要么需要全部获取 3 个(但这会将唯一计数增加到 8,这是' Not Acceptable )或跳过此 OtherID 并查找带有传真的传真,该传真将添加 1 个唯一的 OtherID(例如,它可以有 4 个 OtherID,但其中 3 个存在于结果集中,因此不添加到唯一计数中)。我的 6 个唯一 OtherID 的结果将需要在现有 OtherID 连接到的任何传真下包含所有 OtherID。

因此,一种解决方案是采用第 1-6、26 行。另一种是采用第 1-4,10-14 行。还有更多,但你明白了。

会有很多可能性(真实数据集有数万行,请求的人数将在 10K 左右),只要连接到结果集中所有传真的所有 OtherID 都是请求数的一部分(本例中为 6 ) 任何组合都可以。

一些笔记。

  • 尽可能接近请求的数字是一项要求。
  • 一些OtherIDs 将有一个空白传真,它们只能作为最后的手段(对于请求的号码没有足够的OtherIDs)。

  • 这是怎么做到的?
    Row      OtherID        Fax
    1 11098554 2063504752
    2 56200936 2080906666
    3 11098554 7182160901
    4 25138850 7182160901
    5 56148974 7182232046
    6 56530104 7182234134
    7 25138850 7182234166
    8 56148974 7182234166
    9 11098554 7182234166
    10 56597717 7182248132
    11 56166294 7182248132
    12 25138850 7182248132
    13 56148974 7182390090
    14 56226456 7182390090
    15 56148974 7182395285
    16 25138850 7182395285
    17 56166614 7180930966
    18 11098554 7180930966
    19 56159509 7180930966
    20 25138850 7185462234
    21 56148974 7185462234
    22 25138850 7185465013
    23 56024315 7185465013
    24 56115247 7185465281
    25 25138850 7185465281
    26 56148975 7185466029

    一些示例输出

    一种解决方案是采用第 1-6 行和第 26 行。
    Row      OtherID        Fax
    1 11098554 2063504752
    2 56200936 2080906666
    3 11098554 7182160901
    4 25138850 7182160901
    5 56148974 7182232046
    6 56530104 7182234134
    26 56148975 7185466029

    另一种解决方案是采用第 1-4 行和第 10-14 行。
    Row      OtherID        Fax
    1 11098554 2063504752
    2 56200936 2080906666
    3 11098554 7182160901
    4 25138850 7182160901
    10 56597717 7182248132
    11 56166294 7182248132
    12 25138850 7182248132
    13 56148974 7182390090
    14 56226456 7182390090

    还有很多。

    我只需要传真作为我的输出。

    这是针对传真事件的,我们需要确保没有传真号码被传真两次,所有连接到该传真号码的人都在发送的一份传真下得到联系。

    因此,我们的想法是在您最终使用的任何传真下获取所有 OtherID。

    编辑这里是它目前是如何完成的,也许这有助于画一幅画

    列表是按传真排序的,他们会在列表中随机到达一个点 确保最后一条记录以相同的传真结束。所以在我的例子中,它们会停在第 1、2、4、5、6、9、12、14、16、19、21、23、25、26 行。然后他们会看到直到那时他们有多少个唯一的 OtherID。如果太多,他们会增加一些,看看他们有多少。如果它太少,他们会下降一些,看看他们有多少。他们一直这样做,直到他们得到他们的唯一号码。唯一的要求是始终在传真下包含所有 OtherID。

    最佳答案

    这不是一个完整的答案,但我不想在评论中写很多查询。
    您的主要目标是向人们发送信息,并避免一个人收到两次传真的情况。因此,您首先需要一个唯一收件人列表,如下所示:

    select distinct otherid
    from NR_PVO_120

    如果一个人有两个传真号码,您需要决定,选择哪一个:
    select otherid, fax
    from (select otherid, fax, row_number() over (partition by otherid order by <choosing rule>) rn
    from NR_PVO_120)
    where rn = 1

    (所有这些你在上一个问题的答案中都有)
    如果您获取此传真号码列表,则所有收件人都会收到传真,并且每个人只能收到一份传真。但有些传真号码不会被使用。您可以轻松找到它们:
    select otherid, fax
    from (select otherid, fax, row_number() over (partition by otherid order by <choosing rule>) rn
    from NR_PVO_120)
    where rn > 1

    如果您向其中任何一个号码发送传真,有些人会收到一份传真两次。
    英语不是我的母语,所以我不明白您所说的“不拆分传真号码”是什么意思。正如我在您的问题中看到的那样,您可能需要在问题中使用传真号码的顺序作为号码优先级(表格中的数字越高 - 使用它的可能性就越高)。似乎您可以使用以下内容:
    select otherid, fax
    from (select otherid, fax, row_number() over (partition by otherid order by row) rn
    from NR_PVO_120)
    where rn = 1

    这里 roworder by子句是 Row从您的示例表中。

    更新
    P.S.关于我的最后一个查询:我们有一个有一定顺序的表,顺序很重要。我们逐行获取表格的行。取第一行并将其 otheridfax到结果表。然后取下一行。如果它包含另一个 fax号码和 otherid ,我们接受它,如果 otherid已经在我们的结果表中,我们跳过它。你问过这个算法吗?

    关于excel - 获取多个唯一值,而不分离属于同一值 block 的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27292792/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com