2014-07-24 2 views
0

Можно ли использовать инструкцию max для подбора некоторых строк из запроса в MAX одного столбца?Оператор Interbase SQL с использованием MAX в качестве фильтра?

Я пробовал несколько вещей, которые не сработали. Я попробовал инструкцию max. Я также вижу, что, возможно, Interbase не поддерживает то, что я обычно делаю в SQL Server, - подзапросы. Я могу ошибаться. Я думаю, что мы используем Interbase XE3.

Заявление:

SELECT PM.GUID, PM.PID, 
     PM.MISCID, 
     CAST((PM.YEAR) AS NUMERIC) AS THEYEAR 
    FROM PMASTER PM 
       INNER JOIN SEL SL 
       ON SL.LGID = PM.PID 
ORDER BY PM.PID, 
      THEYEAR 

данных Возвращается

1244 1 21 2013 
3444 1 21 2014 
9888 1 21 2015 
3244 3 45 2014 
5144 3 45 2015 
6588 3 45 2016 
3324 6 73 2014 
5454 6 73 2015 
6758 6 74 2016 

Я желаю макс колонки года: Нужные данные, возвращаемые:

9888 1 21 2015 
6588 3 45 2016 
6758 6 74 2016 

Благодарности

Rick

+0

Это вопрос Interbase и не имеет ничего общего с Delphi. –

+0

Я не мог найти «максимальный год» по вашему желаемому результату. Есть 3 строки для 2015 года и две строки для 2016 года, и вы получаете одну строку в 2015 году и две на 2016 год. Думаю, вам нужно объяснить немного лучше, чем результат. –

+0

Max of theear только сгруппированы по PM.PID. Другие поля не имеют отношения к группировке. –

ответ

0

ОК, я понял. Вопреки нескольким утверждениям, найденным здесь в Stackoverflow и в других местах в Интернете, Interbase поддерживает подзапросы. Вот мое рабочее решение:

SELECT PM.GUID, PM.PID, PM.MISCID, PM.YEAR FROM PMASTER PM 
    INNER JOIN SEL SL ON SL.LGID = PM.PID 
WHERE AND PM.YEAR IN 
    (SELECT MAX(PMS.YEAR) FROM PMASTER PMS WHERE PMS.PID = PM.PID) 
ORDER BY PM.PID, PM.YEAR 

Надеюсь, что это поможет кому-то еще.

0
SELECT PM.GUID, PM.PID, 
     PM.MISCID, 
     CAST((PM.YEAR) AS NUMERIC) AS THEYEAR 
    FROM PMASTER PM 
      INNER JOIN SEL SL 
      ON SL.LGID = PM.PID 
GROUP BY PM.PID 
HAVING PM.YEAR = MAX(PM.YEAR); 
+0

Я думал, что предложение group by должно содержать все столбцы, упомянутые в списке полей, поэтому это решение даже не будет функционировать. Также я не хочу, чтобы все столбцы были сгруппированы вместе с PID, как показывает мой желаемый набор результатов. –

+0

Извините, но я не могу понять, что вы хотите, и предоставленные вами данные вернут именно то, что вы упомянули. – caiohamamura

+0

Это не работает так, как написано. Я попробовал. Он терпит неудачу, поскольку PM.GUID (первичный ключ) и PM.MISCID (внешний ключ) не входят в предложение group by. Эти два столбца содержат разные значения для одного и того же PM.PID, поэтому группировка не может произойти на PM.PID, потому что процессор не знает, какой PM.GUID/PM.MISCID выбрать для группы. Это основные концепции группировки SQL. Мне нужны эти столбцы в результирующем наборе, поэтому я не могу их исключить. Таким образом, решение (Simple SQL Server) является подзапросом (Select * from (Select)). –

Смежные вопросы