показывать данные только с наименьшей датой, если они недоступны, тогда любая дата доступна в SQL

#sql

#sql

Вопрос:

У меня есть таблица со столбцами идентификатор проекта, название проекта, период и статус.

Мне нужна только уникальная строка с идентификатором проекта с наименьшим / минимальным периодом.

 Project ID  |   Project name |  Period  | Status
-----------------------------------------------
1234877     |   abc      |01-01-2020| Closed
-------------------------------------------------
34277822    |   bcd      |01-01-2020| Closed
-------------------------------------------------
34277822    |   bcd      |01-02-2020| Closed
-------------------------------------------------
34277822    |   bcd      |01-03-2020| Closed
-------------------------------------------------
34277822    |   bcd      |01-04-2020| Closed
-------------------------------------------------
66277261    |   efg      |01-01-2020| Closed
-------------------------------------------------
4526373     |   hij      |01-07-2020| Closed
--------------------------------------------------
234532      |   jkl      |01-02-2020| Closed
--------------------------------------------------
234532      |   jkl      |01-03-2020| Closed
--------------------------------------------------
526263      |   mno      |01-01-2020| Closed
----------------------------------------------------
8282827     |   pqr      |01-01-2020| Closed
----------------------------------------------------
212333      |   stu      |01-07-2020| Closed
----------------------------------------------------
8977552     |   vwx      |01-01-2020| Closed
----------------------------------------------------
8977552     |   vwx      |01-02-2020| Closed
-----------------------------------------------------
8977552     |   vwx      |01-03-2020| Closed
------------------------------------------------------
8977552     |   vwx      |01-04-2020| Closed
-------------------------------------------------------
8977552     |   vwx      |01-05-2020| Closed
-------------------------------------------------------
 

Вывод, который я хочу, это

 Project ID  |   Project name |  Period  | Status
-----------------------------------------------
1234877     |   abc      |01-01-2020| Closed
-------------------------------------------------
34277822    |   bcd      |01-01-2020| Closed
-------------------------------------------------
66277261    |   efg      |01-01-2020| Closed
-------------------------------------------------
4526373     |   hij      |01-07-2020| Closed
--------------------------------------------------
234532      |   jkl      |01-02-2020| Closed
--------------------------------------------------
526263      |   mno      |01-01-2020| Closed
----------------------------------------------------
8282827     |   pqr      |01-01-2020| Closed
----------------------------------------------------
212333      |   stu      |01-07-2020| Closed
----------------------------------------------------
8977552     |   vwx      |01-01-2020| Closed
----------------------------------------------------
 

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

1. Пометьте свой вопрос базой данных, которую вы используете.

Ответ №1:

Простой метод использует коррелированный подзапрос:

 select t.*
from t
where t.period = (select min(t2.period)
                  from t t2
                  where t2.project_id = t.project_id
                 );
 

С индексом на (project_id, period) это часто имеет наилучшую производительность во многих базах данных.