【发布时间】:2014-05-05 20:54:06
【问题描述】:
我有 5 个与此查询相关的表和列:
- 狗(ID、CallName、颜色、性别、Chipnumber、BreedID)
- 品种(ID、名称)
- 状态(ID、状态、OwnedOnPremises)
- DogsStatus(ID、DogsID、StatusID、StatusDate、Note、ContactsID)
- 联系人(ID、姓名)
我想要所有狗及其最新状态的结果。对于测试,我使用以下记录:
- 狗 (251, Tank, Fawn, M, 14410784, 23) (266, Bonnie, Brindle, 14964070, 23)
- 品种(23,獒)
- 状态(3,已售出)(4,赠送)(7,已购买)(9,退回)
- DogsStatus (29, 251, 3, 2013-10-12, 5) (39, 251, 9, 2013-11-10, 17) (146, 251, 4, 2014-01-10, 7) ( 40, 266, 7, 2013-10-30, 1)
- 联系人 (1, Person1) (5, Person5) (7, Person7) (17, Person17)
到目前为止,我有:
SELECT
d.CallName, b.Name AS 'Breed', d.Color, d.Sex, d.ChipNumber
FROM
Dogs d
JOIN
(SELECT
DogsID, MAX(StatusDate) as MaxStatusDate
FROM DogsStatus
GROUP BY DogsID) mds ON mds.DogsID = d.ID
JOIN
Breeds b ON b.ID = d.BreedID
这将返回 2 条唯一记录(1 条用于 Tank,1 条用于 Bonnie),但每当我尝试获取任何其他 DogsStatus 和/或状态信息时,我要么只返回一条狗记录,要么返回全部 3 条 Tanks DogsStatus记录。
提前致谢。
【问题讨论】:
-
您必须将派生表中的
MaxStatusDate连接到DogsStatus表。这使您可以将其实际限制为最新状态。 -
SQL Server 2012 速成版
标签: sql sql-server