我有一個主鍵和一個'第二'鍵的數據庫中的表。第二個鍵可以在表中出現多次,但通常我只想返回第二個鍵的最近一行。我有一個現有的查詢可以在下面使用,但我覺得這很醜陋,應該有一個更簡單的方法來做到這一點,而不是創建一個表變量,通過一個循環,並在每次通過時插入1行到表變量循環。我是否讓這太難?使用多個鍵優化SQL查詢
declare @RowCnt int
declare @MaxRows int
declare @secondID as uniqueidentifier
DECLARE @retList TABLE(
firstGUID uniqueidentifier,
secondGUID uniqueidentifier,
name nvarchar(50),
DateCreated datetime
)
select @RowCnt = 1
declare @Import table (rownum int IDENTITY (1, 1) Primary key NOT NULL , secondGUID uniqueidentifier)
insert into @Import (secondGUID) SELECT DISTINCT dbo.TestTable.secondGUID FROM dbo.TestTable
select @MaxRows=count(*) from @Import
while @RowCnt <= @MaxRows
begin
select @secondID=secondGUID from @Import where rownum = @RowCnt
INSERT INTO @retList
SELECT TOP (1) firstGUID,secondGUID,name,datecreated
FROM dbo.TestTable
WHERE dbo.TestTable.secondGUID = @secondID
ORDER BY DateCreated Desc
Set @RowCnt = @RowCnt + 1
END
select * from @retList
編輯: 例如,假設表中有這些值
firstGUID secondGUID Name DateCreated
EAD50999-E9B1-43F0-9FA6-615405FA5A9A 6163B6ED-6AF4-494E-ACE6-184F4804847B Test1 2014-04-11 15:12:36.303
A9645486-1021-4E98-92AC-1205CC3FB9D3 6163B6ED-6AF4-494E-ACE6-184F4804847B Test2 2014-04-10 15:21:46.087
DEE375BB-BFAF-44BE-AC64-06D7702E2ACB 3BD0A2F0-4E44-43B9-BD24-003B518609C7 Test3
2014-04-11 15:22:37.097
我只想要返回的測試1和Test3的行。
如果「第二」鍵可出現在表中的多行上,這不是關鍵。無論是主鑰匙還是備用鑰匙,作爲鑰匙,它必須是唯一的。 –
我不是爭論這一點,這就是爲什麼我在報價中。這是一個關鍵,因爲我希望我的查詢的響應只有一個返回該鍵的結果(所以它在查詢中是唯一的),但不是,它在表中不是唯一的。因此複雜的查詢。 – Phil
嚴肅地說,當在關係數據庫中使用「key」這個詞時,它具有明確而明確的含義。如果你在這裏選擇了另外一個詞,你會更好地理解。 –