#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