如何在没有旧的,未更新的行的情况下选择新创建的行?

时间:2018-03-07 19:35:37

标签: sql ms-access

我有一个我正在搜索的数据库,有时会被其他人更新。它的更新方式很糟糕,但我无法改变它。更新的数字包含“-1”或“-2”。例如,

ID
1
2
3
4

每当更新一个ID时,就会创建一个新行:

ID
1
1-1
2
3
4

在这种情况下,1已更新。表1中显示了1和1-1。如果它再次更新,它看起来像这样:

ID
1
1-1
1-2
2
3
4

这让我很生气,但我无能为力。我想在查询中选择行,以便我得到

ID
1-2
2
3
4

有人有任何建议吗?

2 个答案:

答案 0 :(得分:1)

我假设您的ID是字符串,因为您可以在其中使用-。您可以使用整个表和另外两列创建已保存的查询:

OriginalID: IIf(InStr([ID],'-')=0,[ID],CInt(Left([ID],InStr([ID],'-')-1)))

Version: IIf(InStr([ID],'-')=0,0,CInt(Right([ID],Len([ID])-InStr([ID],'-'))))

这会将短划线后面的数字转换为实际数字(原始版本为0)。

然后使用

SELECT [OriginalID] & IIF(Max([Version])=0,'','-' & Max([Version])) AS MaxID
FROM [MySavedQuery]
GROUP BY [OriginalID]

我没有机会对此进行测试,因此这里或那里可能缺少一个括号,或者您可能需要在某些长度上添加+1或-1,但它应该可以帮助您完成大部分工作。< / p>

答案 1 :(得分:1)

首先,在不使用破折号的情况下拆分ID部分,如果没有破折号则将其设置为0:

SELECT ID, 
    CLng(IIF(ID Like "*-*", Right(ID, Len(ID) - InStr(1, ID, "-")), 0)) As LastPartID,
    CLng(IIF(ID LIKE "*-*", Left(ID, InStr(1, ID, "-") - 1), ID)) As FirstPartID
From MyTable

如果将其另存为单独的查询,则下一个查询很简单:

SELECT FirstPartID & IIF(Max(LastPartID) = 0, "", "-" & Max(LastPartID))
FROM MyQuery
GROUP By FirstPartID