【发布时间】:2009-08-08 00:32:23
【问题描述】:
抱歉,我不知道该如何表达,而且我真的不太擅长 SQL。数据库引擎 i SQL Server Compact。我目前有这个查询:
SELECT *
FROM Samples
WHERE FunctionId NOT IN
(SELECT CalleeId FROM Callers)
ORDER BY ThreadId, HitCount DESC
这给了我:
ThreadId Function HitCount
1 164 6945
1 3817 1
4 1328 7053
现在,我只想要 Thread 的每个唯一值的最大命中数的结果。换句话说,应该删除第二行。我不知道如何解决这个问题。
[编辑] 如果有帮助,这是同一查询的另一种形式:
SELECT *
FROM Samples s1
LEFT OUTER JOIN Callers c1
ON s1.ThreadId = c1.ThreadId AND s1.FunctionId = c1.CalleeId
WHERE c1.ThreadId IS NULL
ORDER BY ThreadId
[编辑] 我最终进行了架构更改以避免这样做,因为建议的查询看起来相当昂贵。感谢大家的帮助。
【问题讨论】:
-
是否有可能有两个 ThreadId 共享相同的 FunctionId,其中一个(ThreadId,FunctionId)在调用者中,而不是另一个?我问,因为上面的两个查询说的不是同一件事。
标签: sql sql-server database