SELECT AnotherID, text FROM Table1 WHERE updateDate<=(SELECT versionDate FROM Table2 WHERE ID=1)
4 Réponses :
Vous pouvez essayer ceci.
SELECT AnotherID, text
FROM Table1 AS T1
INNER JOIN (
SELECT ANOTHERID, MAX(UPDATEDDATE) AS UPDATEDDATE
FROM TABLE1 GROUP BY ANOTHERID) AS T2
ON T1.ANOTHERID=T2.ANOTHERID AND T1.UPDATEDDATE = T2.UPDATEDDATE
WHERE T1.updateDate<=(SELECT versionDate FROM Table2 WHERE ID=1)
La partie importante ici est que vous devez d'abord saisir la date maximale pour chaque AnotherID, puis joindre ces données à Table1 pour récupérer le texte, quelque chose comme ceci:
SELECT
AnotherID, text
FROM
Table1
JOIN (
SELECT
AnotherID, max(updateDate) as mud
FROM
Table1
WHERE
updateDate <= (SELECT versionDate FROM Table2 WHERE ID=1)
GROUP BY
AnotherID
) highdate ON (Table1.AnotherID = highdate.AnotherID
AND
Table1.updateDate = highdate.mud);
Votre question est un peu vague sur la façon dont vous voulez filtrer les lignes qui sont supérieures à la versionDate, vous pouvez donc déplacer cette clause where après la jointure, mais sinon, ce qui précède devrait fonctionner.
Requête :
| AnotherID | text | |-----------|-------| | 1 | test2 | | 2 | hello |
Résultat:
SELECT [AnotherID], [text] FROM( SELECT *, ROW_NUMBER()over(partition by AnotherID order by updateDate desc) as rn FROM Table1)a WHERE a.rn = 1
Vous semblez vouloir la version la plus récente avant la date du tableau 2. Si tel est le cas, la logique correcte serait:
SELECT t1.*
FROM Table1 t1
WHERE t1.updateDate = (SELECT MAX(tt1.versionDate)
FROM Table1 tt1 JOIN
Table2 t2
ON tt1.updateDate <= t2.versionDate
WHERE t2.ID = 1
) ;
Double possible de SQL sélectionner uniquement les lignes avec une valeur maximale sur un colonne
J'ai ajouté MAX (updateDate) et groupé par Another ID maintenant il me montre le texte de la ligne 1 avec la date de la ligne 2
Pourquoi correspondez-vous à la date à laquelle vous sélectionnez en fonction de l'ID. Votre jeu de résultats correspond à ce que vous demandez dans la requête: à savoir, sélectionnez tous les enregistrements où la
updateDateest inférieure ou égale à laversionDatede l'enregistrement dansTable2(qui a la plus grande date / heure.@Grevak. . . Je soupçonne que vous voulez la date de mise à jour la plus récente au plus tard à la date de la version. Si tel est le cas, la réponse actuellement acceptée n'est pas correcte.