MS Access запрос - PullRequest
       2

MS Access запрос

1 голос
/ 21 июля 2011

Я использую MS-доступ.У меня есть таблица с именем CHANGES, имеющая столбцы

( CNO (int) , TNO (int), DATE_C).

Я хочу написать запрос SQL, который отображает недавнюю дату, и сгруппировать его только по CNO.Но я также хочу отобразить TNO.

SELECT tno, cno, max(date_c)
FROM changes
WHERE [Date_c] In (SELECT [date_c] FROM changes  WHERE [date_c]<=[Enter date])
GROUP BY cno;

Ответы [ 2 ]

0 голосов
/ 21 июля 2011

Существует около семи способов сделать это в SQL (потому что всегда есть :) и это часто задаваемый вопрос о Stackoverflow.Вот один из них: (Я опустил ваш параметр date_c <= [Enter date] для ясности и потому, что не могу проверить - я не использую интерфейс Access!):

SELECT DISTINCT C1.tno, C1.cno, 
       DT1.c_most_recent_date
  FROM changes AS C1
       INNER JOIN (
                   SELECT C2.cno, 
                          MAX(C2.c_date) AS c_most_recent_date
                     FROM changes AS C2
                    GROUP
                       BY C2.cno
                  ) AS DT1 
          ON C1.cno = DT1.cno;
         AND C1.c_date = DT1.c_most_recent_date;

А вот еще один:

SELECT DISTINCT C1.tno, C1.cno, 
       C1.c_date AS c_most_recent_date
  FROM changes AS C1
 WHERE NOT EXISTS (
                   SELECT *
                     FROM changes AS C2
                    WHERE C2.cno = C1.cno
                          AND C1.c_date < C2.c_date
                  );
0 голосов
/ 21 июля 2011

Это не имеет смысла. Вы не можете показать TNO, если он может отличаться для того же CNO, если вы группируете для CNO. Если вы хотите показать ЛЮБОЙ TNO, вы можете сделать это:

SELECT FIRST(tno), cno, max(date_c)
FROM changes
WHERE [Date_c] In (SELECT [date_c] FROM changes  WHERE [date_c]<=[Enter date])
GROUP BY cno;

или это:

SELECT LAST(tno), cno, max(date_c)
FROM changes
WHERE [Date_c] In (SELECT [date_c] FROM changes  WHERE [date_c]<=[Enter date])
GROUP BY cno;

Но обычно вы хотите сгруппировать по обоим, если вы хотите отобразить оба. (даже если вы сказали, что не хотите).

...