4

時間の経過とともに変化するいくつかのオブジェクトのプロパティを含むテーブルを設計しています。

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)

ご覧のとおり、Weight が 1000 の Chair オブジェクトがあったので、Weight を 2000 に変更しました。オブジェクト プロパティの変更履歴のようなものを保存しています。ここで、オブジェクトごとにこのテーブルから最新のデータを選択したいと考えています。各オブジェクトの最新データを 1 つずつ選択する方法を知っています。

SELECT TOP 1 * FROM [ObjectProperties] WHERE ObjectType = 1 ORDER BY Id DESC

しかし、1 回のクエリで少数のオブジェクトを選択したい場合はどうすればよいでしょうか? お気に入り

SELECT ... * FROM [ObjectProperties] WHERE ObjectType IN (1, 2) ...

ID が 2 と 3 の行を受け取ります (3 には 1 よりも椅子の新しいプロパティがあるため)

4

2 に答える 2

3

簡単な (確かに大雑把な) 方法は次のとおりです。

select * from ObjectProperties where id in
   (select max(id) from ObjectProperties group by objecttype)

これは与える:

Id          ObjectType Width  Height Weight
----------- ---------- ------ ------ ------
2           2          80     40     500
3           1          50     50     2000
于 2013-07-17T10:59:58.603 に答える