如何在 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 以获得更好的性能目的?