SQL show only the oldest date with same number
To sum up, there are three major issues in your query:


As noted by ypercubeᵀᴹ, the order of the clauses is wrong in one place: the WHERE clause should go after the FROM clause and before the GROUP BY clause:

SELECT
  ...
FROM
  ...
WHERE
  ...
GROUP BY
  ...

As has already been addressed by Rajesh Ranjan, the GROUP BY clause must include all non-aggregated columns of your SELECT list, so it should look like this:

GROUP BY
  DIVISION,
  DEPT_CODE,
  NO

Finally, if your statement happens to be part of a PL/SQL block, you must end it with a semicolon:

SELECT
  DIVISION,
  DEPT_CODE,
  NO,
  min(START_DATE),
  row_number() over (order by 
    DIVISION,   
    DEPT_CODE   
  ) as "NEW_NO"
FROM INFO 
WHERE (TITLE IS NULL
  OR (upper(TITLE) NOT LIKE '%RESEARCH%'
  AND upper(TITLE) NOT LIKE '%POSTDOCTORAL FELLOW%'
  AND upper(TITLE) NOT LIKE '%PROJECT%'
  )
)
GROUP BY
  DIVISION,
  DEPT_CODE,
  NO;



Note that resolving all these issues does not guarantee you will get the expected result. Addressing the above points should merely let you run your query without errors. If it shows incorrect results, that will be a separate issue requiring a separate question.