Стандартная формулировка ANSI - при условии, что date
хранится как дата / время - будет:
select num, count(*)
from t
where date >= date '2018-05-09' and
date < date '2018-05-10'
group by num
order by count(*) desc
fetch first 1 row only;
Обратите внимание, что большинство баз данных будет иметь некоторые незначительные изменения этого синтаксиса. Кроме того, это только возвращает значение, если есть связи.
EDIT:
Вопрос в единственном числе:
Я хочу получить наиболее часто встречающееся значение столбца "num" для значения "id".
Однако, если вам нужны все эквивалентные значения в случае связи, то:
select num, cnt
from (select num, count(*) as cnt,
rank() over (order by count(*) desc) as seqnum
from t
where date >= date '2018-05-09' and
date < date '2018-05-10'
group by num
) n
where seqnum = 1;