поиск минимального / максимального количества полей даты

#sql #sql-server-2008

#sql #sql-server-2008

Вопрос:

У меня есть база данных с несколькими датами для одного и того же уникального идентификатора. Я пытаюсь найти первую (минимальную) и последнюю (максимальную) дату для каждого уникального идентификатора. Я хочу, чтобы результатом было: уникальный идентификатор, первая дата, последняя дата, поле 1, поле 2, поле 3

 Select  max(date_Executed) as Last_Date,
    (select unique_ID, MIN(date_Executed)as First_Date
from Table_X
group by unique_ID, Field1, field2,field3
)
from Table_X
where unique_ID = unique_ID
group by unique_ID, Field1, field2,field3
order by unique_ID,First_Permit_Date
  

Я получаю сообщение об ошибке:

В списке выбора может быть указано только одно выражение, если подзапрос не введен с помощью EXISTS . Сообщение 207, уровень 16, состояние 1, строка 19 Недопустимое имя столбца ‘First_Permit_Date’.

Я новичок в SQL… Спасибо за вашу помощь-

Ответ №1:

почему бы не просто выбрать с помощью group by

 Select  max(date_Executed) as Last_Date, MIN(date_Executed) as First_Date
from Table_X
group by unique_ID, Field1, field2,field3
order by unique_ID,First_Permit_Date
  

Вы можете использовать более одной функции агрегирования в select .. (с тем же предложением group by)

Комментарии:

1. @Gross . объясните лучше, если вы прокомментируете.. вам нужна какая-то другая поддержка ..?

2. В случае, если ваши поля даты могут быть null , например, когда date_Executed еще не произошло, и вы хотите null иметь минимальное значение, если оно присутствует, вам нужно будет сделать что-то вроде min(isnull(date_Executed, convert(datetime, 0))) as First_Date .

3. @KentWeigel правильно .. если значение равно нулю, вы можете управлять этим способом .. спасибо

4. это ответило на мой вопрос. Спасибо за вашу помощь!

Ответ №2:

Разве это не должно быть что-то вроде этого? У меня нет дополнительной информации о ваших таблицах, но второй оператор ‘select’, похоже, вызывает ошибку.

 SELECT unique_ID, min(date_Executed) as First_Date, max(date_Executed) as Last_Date, field1, field2, field3

FROM Table_X
GROUP BY unique_ID, Field1, field2, field3
order by unique_ID, First_Permit_Date
  

Комментарии:

1. Наверное, я делал это так сложно …! Спасибо!