如何在 Power Query 中编写 SQL“Top 1”?

Posted

技术标签:

【中文标题】如何在 Power Query 中编写 SQL“Top 1”?【英文标题】:How do I write SQL "Top 1" in PowerQuery? 【发布时间】:2021-07-22 03:05:35 【问题描述】:

如何在 PowerQuery 中编写 SQL“Top 1”?

Select Top 1 ObjectID, Name, StageEntryDate
From Table
Order By StageEntryDate Desc

这行不通

   ....
   #"Grouped Rows" = Table.Group(#"Filtered Rows", "ObjectID", "Dated", each List.Max([StageEntryDate]), type datetime, "StagedAsID", each List.Max([ObjectID]), type text),
   ....

/////////////////////////////////////// ////////

让我试着正确地改写一下。

如何使用 PowerQuery 根据日期选择每个组中的姓氏?

样本数据

|GroupID|ObjectID|Name      |StageEntryDate|
|-------|--------|----------|--------------|
|1      |       1|  Stage1  |2022-05-20    |
|1      |       2|  Stage2  |2018-07-26    |
|1      |       3|  Stage3  |2020-06-20    |
|2      |       4|  Stage1  |2018-05-18    |
|2      |       5|  Stage2  |2010-03-16    |
|2      |       6|  Stage3  |2018-05-06    |
|2      |       7|  Stage4  |2025-03-27    |
|3      |       8|  Stage1  |2029-11-15    |
|3      |       9|  Stage2  |2012-12-24    |
|4      |      10|  Stage1  |2023-10-24    |
|4      |      11|  Stage2  |2023-01-17    |
|4      |      12|  Stage3  |2012-10-25    |
|4      |      13|  Stage4  |2011-02-19    |
|4      |      14|  Stage5  |2025-09-22    |
|4      |      15|  Stage6  |2025-08-28    |
|4      |      16|  Stage7  |2015-12-15    |

对于每个组,我想要最近的“名称”值(基于日期)

所以对于 GroupID=1 我想要“Stage1” GroupID = 4 我应该得到“Stage5”

【问题讨论】:

【参考方案1】:

使用 Table.FirstN(table as table, countOrCondition as any) as table

【讨论】:

【参考方案2】:

由于您没有提供示例,我不确定您到底想要什么。

如果您想要这些列中的最高值条目,那么您的代码看起来应该可以工作。

如果您想要子表中的第一个条目,无论值如何,那么可能:

   #"Grouped Rows" = Table.Group(#"Filtered Rows", "ObjectID", 
        "Dated", each [StageEntryDate]0, type datetime, 
        "StagedAsID", each [ObjectID]0, type text
        )

如果您想要其他内容,请以文本形式提供数据样本并以屏幕截图形式提供所需的输出。

编辑:用你改写的问题,尝试:

//Group by ID, then extract the Name corresponding to the most recent StageEntryDate
    #"Grouped Rows" = Table.Group(#"Changed Type", "GroupID", 
        "Most Recent Name", each  [Name]
            List.PositionOf([StageEntryDate], List.Max([StageEntryDate]))        
        )

使用您的数据:

【讨论】:

以上是关于如何在 Power Query 中编写 SQL“Top 1”?的主要内容,如果未能解决你的问题,请参考以下文章

如何将此 COUNTIFS 转换为 Power Query 以获得更好的性能目的?

Python如何批量修改替换Excel Power Query里面的SQL脚本

如何编写转换为 T-SQL 的 EF Core 查询包含

具有 Power Query 日期的动态 SQL 查询

如何提取金蝶软件数据到power query

Power Query 中的索引匹配或 Vlookup