SQL-запрос для SQL Server Compact Edition 3.5 - выпуск GROUP BY - PullRequest
1 голос
/ 14 октября 2010
    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, но по одному ряду на ребенка ...

Я пытался TOP(1), но это работало только для первого ребенка

Ответы [ 2 ]

3 голосов
/ 14 октября 2010

Вот один из способов сделать это, есть и другие способы, которые могут быть быстрее, но я считаю, что этот способ будет наиболее понятным для новичка.

 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
1 голос
/ 14 октября 2010

Это должно сделать это:

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.

...