Форум программистов, компьютерный форум, киберфорум
PostgreSQL
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
151 / 86 / 35
Регистрация: 05.08.2017
Сообщений: 257

ORDER BY DESC NULLS LAST дает дубли

28.04.2023, 13:08. Показов 921. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет, имеется таблица с полями id и publish_date - DateTime тип. Мне нужно получить записи с сортировкой по дате по убыванию, при этом необходимо получать их по смещению по 1 штуке.
Следующий код:
Python
1
2
3
for i in range(25):
    result = main_engine.execute(f"SELECT ad.id, ad.publish_date from ad ORDER BY ad.publish_date DESC NULLS LAST LIMIT 1 OFFSET {i}").one()
    print(result.id, result.publish_date)
В результате в консоль выводятся ID и publish_date каждой записи. В первых пяти записях все ок, но записи у которых publish_date == None - дублируются. Если из запроса убрать NULLS LAST, то дублей не наблюдается, записи возвращаются как надо, только нули первыми идут, а мне надо наоборот. Может кто подскажет куда копать?
Вывод скрипта выше:
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
12521 2023-04-26 08:40:31
12697 2023-04-25 10:48:05
12630 2023-04-24 13:32:29
12598 2023-04-18 08:43:28
10325 2023-02-02 12:00:00
12700 None Вот отсюда начинается дублирование записей
12700 None
12766 None
12766 None
12766 None
12698 None
12698 None
13066 None
13099 None
13100 None
12833 None
12866 None
12899 None
12932 None
13101 None
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
28.04.2023, 13:08
Ответы с готовыми решениями:

Запрос ORDER BY с NULLS LAST
Есть запрос для PGSQL, нужно сделать аналогичный в SQLite SELECT name, salary FROM docs ORDER BY name NULLS LAST ASC, salary NULL...

SQLAlchemy, ORDER_BY DESC NULLS LAST + OFFSET дают дубли
Всем привет, есть модель (урезал): class Ad(Base): __tablename__ = "ad" id = sqlalchemy.Column(sqlalchemy.Integer,...

Select и ORDER BY DESC
SELECT ПОДРАЗДЕЛЕНИЯ., ШТАТНЫЕ_ЕДИНИЦЫ., ШТАТНЫЕ_ЕДИНИЦЫ., ПОДРАЗДЕЛЕНИЯ., ШТАТНЫЕ_ЕДИНИЦЫ., ШТАТНЫЕ_ЕДИНИЦЫ.*(1 +...

4
 Аватар для index58
59 / 25 / 10
Регистрация: 01.07.2016
Сообщений: 153
28.04.2023, 14:28
Лучший ответ Сообщение было отмечено Resistanse как решение

Решение

Не уверен. Но я бы попробовал так:
SQL
1
SELECT ad.id, ad.publish_date FROM ad ORDER BY ad.publish_date DESC NULLS LAST, ad.id LIMIT 1 OFFSET {i}
1
151 / 86 / 35
Регистрация: 05.08.2017
Сообщений: 257
28.04.2023, 15:27  [ТС]
Цитата Сообщение от index58 Посмотреть сообщение
Не уверен. Но я бы попробовал так:
SQLВыделить код
1
SELECT ad.id, ad.publish_date FROM ad ORDER BY ad.publish_date DESC NULLS LAST, ad.id LIMIT 1 OFFSET {i}
Да, действительно сработало. Как я понял, этот код сортирует по publish_date, а если он null, то сортирует по id в порядке возрастания. Но почему происходит такое поведение и необходимо добавлять 2 сортировку по id? Я предполагал что в данном случае должна произойти сортировка по publish_date и так как мы указываем NULLS LAST, то записи с нулевыми значениями должны вернуться как есть из базы, т.е. в случайном порядке
0
 Аватар для index58
59 / 25 / 10
Регистрация: 01.07.2016
Сообщений: 153
28.04.2023, 16:46
Цитата Сообщение от Resistanse Посмотреть сообщение
то записи с нулевыми значениями должны вернуться как есть из базы, т.е. в случайном порядке
Да. Только эта случайность иногда бывает разная в каждом из 25 запросов, и поэтому идут повторения без дополнительной сортировки
1
55 / 50 / 5
Регистрация: 30.06.2022
Сообщений: 251
28.04.2023, 19:05
Какое нибудь поле с последовательностью для сортировки влепить?
Если она железно нужна чтоб предсказуема выдавалась.

Добавлено через 4 минуты
А ещё есть NULLS FIRST
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
28.04.2023, 19:05
Помогаю со студенческими работами здесь

ORDER BY DESC В mysql запросе
Не работает ORDER BY DESC в phpmyadmin. Подскажите правильный синтаксис.

Неверно сортирует ORDER BY DESC
Делаю сортировку select * from xusers WHERE (status='Готово' OR status='Рассмотрение' OR status='Ожидание') AND summa > 0 AND...

Сортировка поля Order by + DESC не работает
Добрый день , создал форму, добавил все что надо, вот собственно код . void __fastcall TForm1::Button5Click(TObject *Sender) { ...

Оптимизации связки: OVER + PARTITION + ORDER + DESC
Добрый день. Есть таблица на 10М записей. В ней есть два важных поля: "NomerDogovora" - Номер договора "AutoNumber" -...

php order desc что не так с кодом
Всем привет. Делаю сайт, встала проблема нужна сортировка новостей. Как бы не пробовал ничего не получается. <?php $sql = 'SELECT...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru