gpt4 book ai didi

excel - 如何将 1 添加到 Excel 中最近的重复行?

转载 作者:行者123 更新时间:2023-12-04 21:05:45 24 4
gpt4 key购买 nike

我有一个数据集,在 excel 中有 60+ 千行和大约 20 列。 “ID 列”有时会重复自己,我想添加一个仅在最近的行中返回 1 的列,如果它重复的话。

这是示例。我有…

    ID            DATE       ColumnX
AS1 Jan-2013 DATA
AS2 Feb-2013 DATA
AS3 Jan-2013 DATA
AS4 Dec-2013 DATA
AS2 Dec-2013 DATA

我想…
    ID            DATE       ColumnX      New Column
AS1 Jan-2013 DATA 1
AS2 Feb-2013 DATA 0
AS3 Jan-2013 DATA 1
AS4 Dec-2013 DATA 1
AS2 Dec-2013 DATA 1

我一直在尝试使用排序和嵌套 if 的组合,但这取决于我的数据始终处于相同的顺序(以便它查找前一行中的 ID)。

加分点:如果我的数据集对于 excel 来说相当大,那么可以考虑使用不会占用处理器的最有效代码!

最佳答案

您可以使用的一种方法是将 MSQuery 指向您的表并使用 SQL 来应用业务规则。从好的方面来说,这运行得非常快(在我对 64k 行的测试中只需要几秒钟)。一个巨大的缺点是查询引擎似乎不支持超过 64k 行的 Excel 表,但可能有办法解决这个问题。无论如何,我会提供解决方案,以防它给您一些想法。

设置首先给你的数据集一个命名范围。我叫它MYTABLE .节省。接下来在第 1 行中选择表格右侧的一个单元格,然后单击 Data | From other sources | from Microsoft Query .选择Excel Files* | OK ,浏览您的文件。查询向导应打开,显示 MYTABLE可用,添加所有列。点击取消(真的),然后点击Yes ,您想继续编辑。

应该会打开 MSQuery 界面,点击 SQL按钮并将代码替换为以下内容。您将需要编辑一些细节,例如文件路径。 (另外,请注意我使用了不同的列名。这纯粹是我的偏执狂。Jet 引擎非常挑剔,我想在构建它时排除与保留字的冲突。)

SELECT 
MYTABLE.ID_X,
MYTABLE.DATE_X,
MYTABLE.COLUMN_X,
IIF(MAXDATES.ID_x IS NULL,0,1) * IIF(DUPTABLE.ID_X IS NULL,0,1) AS NEW_DATA
FROM ((`C:\Users\andy3h\Desktop\SOTEST1.xlsx`.MYTABLE MYTABLE
LEFT OUTER JOIN (
SELECT MYTABLE1.ID_X, MAX(MYTABLE1.DATE_X) AS MAXDATE
FROM `C:\Users\andy3h\Desktop\SOTEST1.xlsx`.MYTABLE MYTABLE1
GROUP BY MYTABLE1.ID_X
) AS MAXDATES
ON MYTABLE.ID_X = MAXDATES.ID_X
AND MYTABLE.DATE_X = MAXDATES.MAXDATE)
LEFT OUTER JOIN (
SELECT MYTABLE2.ID_X
FROM `C:\Users\andy3h\Desktop\SOTEST1.xlsx`.MYTABLE MYTABLE2
GROUP BY MYTABLE2.ID_X
HAVING COUNT(1) > 1
) AS DUPTABLE
ON MYTABLE.ID_X = DUPTABLE.ID_X)

使用适当的代码 MSQuery 将提示无法以图形方式表示查询。它是 OK .查询将执行 - 在此阶段运行可能需要比预期更长的时间。我不知道为什么,但它应该在后续刷新时运行得更快。一旦结果返回, File | Return data to Excel .接受“导入数据”对话框中的默认值。

这就是技术。要针对新数据刷新查询,只需 Data | Refresh .如果您需要调整查询,您可以通过 Excel 通过 Data | Connections | Properties | Definition tab 返回它。 .

我提供的代码返回您的原始数据加上 NEW_DATA 列,其值为 1如果 ID 重复并且日期是该 ID 的最大日期,否则 0 .如果 ID 的最大日期在多行上,则此代码不会整理平局。所有这些行都将被标记为 1 .

编辑:很容易修改代码以忽略重复逻辑并显示所有 ID 的最新行。只需更改 SELECT 的最后一位从句阅读
IIF(MAXDATES.ID_x IS NULL,0,1) AS NEW_DATA

在这种情况下,您还可以删除最后的 LEFT JOIN别名 DUPTABLE .

关于excel - 如何将 1 添加到 Excel 中最近的重复行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20913559/

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