2010-10-14 11 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 

Ceci est ma requête. Je veux obtenir le tuple BabyData le plus récent basé sur la date. Le BabyInformation devrait se joindre à gauche babyData mais une ligne par bébé ...Requête SQL pour SQL Server Compact Edition 3.5 - Problème GROUP BY

J'ai essayé TOP(1) mais cela a fonctionné seulement pour le premier bébé

Répondre

1

Cela devrait le faire:

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) 

J'ai supposé qu'il ya une colonne appelée 'BabyDataId' dans le tableau BabyData.

+0

il me donne l'erreur :( – GorillaApe

+0

Il y avait une erreur lors de l'analyse de la requête.Token erreur SELECT (le dernier) – GorillaApe

+0

1) L'exécutez-vous dans SQL Management Studio, ou à partir de votre code? 2) Y a-t-il un champ appelé BabyDataId dans la table BabyData? (Je suppose qu'il y avait - mais vous ne l'avez pas mentionné ..) – Will

3

Voici une façon de le faire, il existe d'autres moyens qui peuvent être plus vite, mais je crois que celui-ci est le plus clair pour un débutant.

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 pour plus de clarté! Cela fonctionnerait, bien que je pense que se joindre à une date comme celle-ci pourrait produire des résultats imprévisibles si deux ou plusieurs lignes étaient insérées dans la table BabyData pour le même bébé simultanément. Probablement pas un problème dans ce cas (c'est ce que la question a demandé après tout) - mais mérite d'être mentionné. – Will

+0

SELECT BabyID, Max (Date) comme maxDate, Longueur, Poids ne travaillera pas .. babyinformation ne contient pas la date – GorillaApe

+0

@Parhs, Je ne peux pas vous aider si vous ne me dites pas ce que contiennent vos tables. Que contiennent les tables et quelles informations voulez-vous? – Hogan

Questions connexes