2014-12-01 3 views
0

я обнаружил несколько примеров, но у меня есть трудности, применяющие это мой случай и как мне нужен запрос очень быстро, я прихожу к вам SQL мастеров :)SQL Access GROUP BY и др ID

мне нужно ниже SELECT вернуть Sessions.id (тот, который соответствует Max (Sessions.DateFin) для каждой строки)

SELECT Sessions.idFormation, 
     Inscriptions.idPersonnel, 
     Max(Sessions.DateFin) AS Dernier 
FROM Sessions 
INNER JOIN Inscriptions ON Sessions.id = Inscriptions.idSession 
GROUP BY Sessions.idFormation, Inscriptions.idPersonnel 

Я считаю, что нужно использовать что-то вроде (это один не имеет ничего общего с моим выше запрос, только один пример из некоторый интернет-форум)

SELECT * FROM Table1 t1 
JOIN 
(
    SELECT category, MAX(date) AS MAXDATE 
    FROM Table1 
    GROUP BY category 
) t2 
ON T1.category = t2.category 
AND t1.date = t2.MAXDATE 

но как t1 в моем случае уже есть запрос Я не понимаю, как реализовать это решение.

+0

Что значит «T1 - это уже запрос»? – HoneyBadger

+0

Спасибо за ответ. Если выяснится решение. не уверен, что это оптимально, он работает, и у него мало времени, чтобы потратить на него. – phramusca

+0

Если у вас есть время сейчас, я предлагаю вам нажать «Принять» на самый полезный ответ ниже (включая ваш собственный). Таким образом, мы все знаем, что ответ можно найти здесь, а не только Вопрос. – Smandoli

ответ

0

Это запрос, который работает. Я уверен, что это может быть упрощено, но как.

SELECT T1.idFormation AS idFormation, T1.idPersonnel AS idPersonnel, T2.Dernier,  T1.Validé AS Validé 
FROM (SELECT Sessions.idFormation, Inscriptions.idPersonnel, Sessions.DateFin,  Sessions.Validé 
    FROM Sessions 
    INNER JOIN Inscriptions ON Sessions.id = Inscriptions.idSession) T1 
INNER JOIN 
(SELECT Sessions.idFormation, Inscriptions.idPersonnel, Max(Sessions.DateFin) AS  Dernier FROM Sessions INNER JOIN Inscriptions ON Sessions.id = Inscriptions.idSession GROUP BY  Sessions.idFormation, Inscriptions.idPersonnel 
) T2 
ON T1.idFormation = T2.idFormation 
AND T1.idPersonnel = T2.idPersonnel 
AND T1.DateFin = T2.Dernier 
1

Попробуйте что-нибудь подобное. Убедитесь, что в качестве Subselect и дать alias name к тому, что Subselect затем присоединиться к существующей подвыборки

SELECT * FROM (--your query--) t1 
JOIN 
(
    SELECT category, MAX(date) AS MAXDATE 
    FROM Table1 
    GROUP BY category 
) t2 
ON T1.category = t2.category 
AND t1.date = t2.MAXDATE 
1

Я думаю, что вы хотите что-то вроде этого:

SELECT s.id, s.idFormation, i.idPersonnel, si.maxdate AS Dernier 
FROM (Sessions as s INNER JOIN 
     Inscriptions as i 
     ON s.id = i.idSession) INNER JOIN 
    (SELECT category, MAX(s.date) as maxdate 
     FROM Sessions as s INNER JOIN 
      Inscriptions as i 
      ON s.id = i.idSession 
     GROUP BY s.idFormation, i.idPersonnel 
    ) as si 
    ON si.category = ??.category AND 
     si.maxdate = s.date; 

Я не знаю, какая таблица категория приходит с; заполните это вместо ??.

+0

Спасибо за ответ. Если выяснится решение. не уверен, что это оптимально, он работает, и у него мало времени, чтобы потратить на него. – phramusca