我有一个我正在搜索的数据库,有时会被其他人更新。它的更新方式很糟糕,但我无法改变它。更新的数字包含“-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
有人有任何建议吗?
答案 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