2010-10-14 113 views
1
SELECT BabyInformation.* , t1.* 
    FROM BabyInformation 
    LEFT JOIN 
     (SELECT * FROM BabyData 
     GROUP BY BabyID 
     ORDER By Date DESC ) AS t1 ON BabyInformation.BabyID=t1.BabyID 

这是我的查询。我想根据日期获取最近的一个BabyData元组。 的BabyInformation应该留下babyData但每个婴儿一行加入...SQL Server Compact Edition 3.5的SQL查询 - GROUP BY问题

我试图TOP(1)但这只是工作的第一个孩子

回答

1

这应做到:

SELECT bi.* , bd.* 
    FROM BabyInformation [bi] 
    LEFT JOIN BabyData [bd] 
     on bd.BabyDataId = (select top 1 sub.BabyDataId from BabyData [sub] where sub.BabyId = bi.BabyId order by sub.Date desc) 

我认为有一个在BabyData表称为 'BabyDataId' 列。

+0

它给了我错误:( – GorillaApe 2010-10-14 10:39:27

+0

解析错误SELECT语句出现错误(最后一个) – GorillaApe 2010-10-14 10:39:58

+0

1)您是在SQL Management Studio中还是从您的代码中执行此操作? 2)BabyData表中是否有称为BabyDataId的字段? (我认为有 - 但你没有提及它..) – Will 2010-10-14 10:45:18

3

下面是做到这一点的一种方式,还有其他的方法可以是更快,但我相信这对初学者来说是最清晰的。

SELECT BabyInformation.*, BabyData.* 
    FROM BabyInformation 
    JOIN 
     (SELECT BabyID, Max(Date) as maxDate FROM BabyData 
     GROUP BY BabyID 
    ) AS t1 
ON BabyInformation.BabyID=t1.BabyID 
    Join BabyData ON BabyData.BabyID = t1.BabyID and BabyData.Date = t1.maxDate 
+0

+1为清晰起见!这是行得通的,但我认为如果在BabyData表中同时插入两行或更多行,那么在这样的日期上加入可能会产生不可预知的结果。在这种情况下可能不是问题(毕竟这是问题的要求) - 但值得一提。 – Will 2010-10-14 10:34:31

+0

选择BabyID,最大(日期)为maxDate,长度,重量不会工作..也babyinformation不包含日期 – GorillaApe 2010-10-14 10:47:11

+0

@Parhs,不能帮助你,如果你不告诉我你的表中包含什么。你的表格包含什么,你想要什么信息。 – Hogan 2010-10-14 10:55:50