查询刷新时如何标记新增行?技术实现咨询
查询刷新时标记新增行的实现方法
不管是用Excel、数据库还是其他数据工具,核心逻辑都是留存历史数据快照,刷新后对比新旧数据,标记出历史里没有的行,下面分常用场景给出具体操作:
一、Excel Power Query 实现步骤
- 准备两张表:一张放每次刷新的新数据(比如叫
NewData),一张存上一次刷新的历史数据(比如叫HistoryData) - 打开Power Query,加载这两张表,用左连接匹配唯一标识列(比如你的
Data列,要保证这列值唯一,不然会误判) - 添加自定义列判断:如果历史表中找不到对应值,标记为「新增」
- 刷新完成后,把当前新数据覆盖到历史表,方便下次对比
对应的Power Query M语言代码示例:
let // 加载历史数据 HistoryData = Excel.CurrentWorkbook(){[Name="HistoryData"]}[Content], // 加载最新数据 NewData = Excel.CurrentWorkbook(){[Name="NewData"]}[Content], // 左连接匹配Data列 JoinedTable = Table.NestedJoin(NewData, {"Data"}, HistoryData, {"Data"}, "History", JoinKind.LeftOuter), // 添加新增标记列 MarkedTable = Table.AddColumn(JoinedTable, "是否新增", each if [History] = null then "是" else ""), // 清理多余列 FinalTable = Table.RemoveColumns(MarkedTable, {"History"}), // 更新历史数据(将当前新数据写入HistoryData表) UpdateHistory = Excel.CurrentWorkbook(){[Name="HistoryData"]}[Content] = NewData in FinalTable
二、SQL 查询场景实现
如果是从数据库拉取数据刷新,用历史表对比即可:
- 先创建历史表存储上一次的查询结果:
CREATE TABLE history_data (data VARCHAR(50) PRIMARY KEY);
- 每次刷新查询时,对比新数据和历史表,标记新增行:
SELECT n.data, CASE WHEN h.data IS NULL THEN '新增' ELSE '' AS is_new FROM new_data n LEFT JOIN history_data h ON n.data = h.data;
- 查询完成后更新历史表,覆盖为当前最新数据:
TRUNCATE TABLE history_data; INSERT INTO history_data SELECT data FROM new_data;
三、通用逻辑(其他工具)
不管用什么工具,只要能实现以下三步就能搞定:
- 每次刷新前,保存当前数据的完整快照作为历史版本
- 刷新新数据后,用唯一标识字段(比如你的
Data值)做新旧数据匹配 - 标记所有在历史版本中没有匹配到的行,这些就是新增行
内容的提问来源于stack exchange,提问作者JustinSane
相关产品推荐
相关产品推荐

