我正在设计表格,其中将包含一些随时间变化的对象的属性。
CREATE TABLE [dbo].[ObjectProperties]
(
[Id] INT NOT NULL PRIMARY KEY IDENTITY,
[ObjectType] SMALLINT NOT NULL,
[Width] SMALLINT NOT NULL,
[Height] SMALLINT NOT NULL,
[Weight] SMALLINT NOT NULL
)
假设我有这个 ObjectTypes:1 = 椅子 2 = 桌子
该表的数据:
INSERT INTO [dbo].[ObjectProperties] ([Id], [ObjectType], [Width], [Height], [Weight]) VALUES (1, 1, 50, 50, 1000)
INSERT INTO [dbo].[ObjectProperties] ([Id], [ObjectType], [Width], [Height], [Weight]) VALUES (2, 2, 80, 40, 500)
INSERT INTO [dbo].[ObjectProperties] ([Id], [ObjectType], [Width], [Height], [Weight]) VALUES (3, 1, 50, 50, 2000)
所以,正如你所看到的,我有一个重量为 1000 的椅子对象,然后我将重量更改为 2000。我正在存储诸如对象属性的修改历史之类的东西。现在我想从这个表中为每个对象选择最新的数据。我知道如何为每个对象一一选择最新数据:
SELECT TOP 1 * FROM [ObjectProperties] WHERE ObjectType = 1 ORDER BY Id DESC
但是如果我想用一个查询选择几个对象呢?喜欢
SELECT ... * FROM [ObjectProperties] WHERE ObjectType IN (1, 2) ...
并接收 id 为 2 和 3 的行(因为 3 的椅子属性比 1 新)