выбрать максимальное значение одного столбца из нескольких значений другого поля - PullRequest
0 голосов
/ 01 октября 2019

Используя Advantage Architect, у меня есть таблица с двумя столбцами, например, SID IDENT и DATE. Каждый DISTINCT IDENT может иметь несколько значений DATE против него, поэтому по строке для IDENT и DATE выполняется SELECT *. Тем не менее, хотя я могу использовать приведенный ниже код для получения значения MAX DATE для каждого IDENT, в этой таблице будут экземпляры, в которых значение DATE равно NULL, и я не хочу никаких результатов, если есть DATE дляданный IDENT, который является нулевым. Таким образом, по сути, я хочу, чтобы мое утверждение показывало результаты только в том случае, если единственными значениями MAX DATE для IDENT являются значения DATES против IDENT, в которых нет нулевых DATE. Есть идеи?

Пример таблицы:

IDENT | DATE
0001  | 19/12/2011
0001  | 30/12/2011
0001  | NULL
0002  | 01/01/2012
0002  | 30/01/2012 

Код, который у меня есть:

select ident, max(date)
from Table A
group by ident;

Требуемый вывод:

IDENT | DATE
0002  | 30/01/2012 

Ответы [ 3 ]

1 голос
/ 01 октября 2019

Выполните GROUP BY, как и раньше, используйте HAVING, чтобы исключить идентификаторы, имеющие нулевую дату.

select ident, max(date)
from Table A
group by ident
having count(date) = count(*)

Будет работать, поскольку count(date) считает ненулевые даты, а count(*) считаетвсе строки.

Для идентичных 0001 count(date) = 2, но count(*) = 3. Т.е. не возвращается.

Для идентификаторов 0002 count(date) = 2 и count(*) = 2. Т.е. вернулся.

0 голосов
/ 01 октября 2019

Я, кажется, упустил здесь дополнительные подробности, так как в качестве части оператора select из таблицы я хочу, чтобы было введено соответствующее значение другого столбца. Итак, это будет IDENT, DATE, REF, с REF, являющимсясвязан с ИДЕНТИФИКАЦИЕЙ и МАКСИМАЛЬНОЙ ДАТАЙ, которая была переданаОднако я не могу этого сделать, поскольку REF отсутствует в части GROUP BY, и когда я добавляю его как часть GROUP BY, это искажает мои результаты.

0 голосов
/ 01 октября 2019

Не уверен, что я понял ваш вопрос, но вы хотите исключить идентификаторы, для которых существует хотя бы 1 строка с NULL датой.

Попробуйте это:

SELECT   a.ident,
         MAX(a.date)
FROM     Table a
WHERE    NOT EXISTS (SELECT *
                     FROM   Table b
                     WHERE  a.ident = b.ident
                       AND  b.date IS NULL)
GROUP BY a.ident;
...