РАЗНЫЕ работы по-разному в MYSQL и POSTGRESQL

#mysql #sql #postgresql #sql-order-by #distinct

#mysql #sql #postgresql #sql-order-by #distinct

Вопрос:

Я создал образец отчета таблицы в SQL и заполнил образец данных в нем, используя следующую команду.

 create table report(id int primary key,vistor_id int, branch_id int,date int);
insert into report values (1,1,3,27),(2,1,2,27),(3,1,1,28),(4,1,4,30),(5,1,1,30);
 

Мне нужно найти список недавно посещенных (на основе столбца даты) ветвей без дублирования.
Поэтому я использовал следующий запрос

 select distinct branch_id from report order by date desc;
 

Он работает в MYSQL, но показывает следующую ошибку в POSTGRESQL. Как это исправить? Или как я могу получить тот же результат в POSTGRESQL?(Ошибка из sqlfiddle.com ).

ОШИБКА: для SELECT DISTINCT выражения ORDER BY должны отображаться в позиции списка выбора: 48

Ответ №1:

Ваш запрос не является допустимым стандартным SQL. Это работает в MySQL, только если у вас ONLY_FULL_GROUP_BY отключена опция.

Проблема в том, что может быть несколько date s для каждого branch_id : какой из них следует использовать для упорядочения?

Вы можете использовать агрегацию и четко указывать, что вы запрашиваете. Допустим, вы хотите заказать по последней дате на branch_id :

 select branch_id from report group by branch_id order by max(date) desc