172 похожих чатов

Всем привет! Подскажите пожалуйста. Как могу добавить в конец при

выборке даты которые после сегодняшнего дня? Вот к примеру как с nulls last, только с будущими датами.

Результат должен быть таким записи до сегодняшней даты, а после должны быть записи после сегодняшней даты

23 ответов

14 просмотров

"Результат должен быть таким записи до сегодняшней даты, а после должны быть записи после сегодняшней даты" -> не поверите, но если отсортируете order by date asc, будет именно то, что вам нужно:)

Amin-Maharram Автор вопроса
Amin-Maharram Автор вопроса
Anatoliy Burov
"Результат должен быть таким записи до сегодняшней...

Он идет с будущей датой, потом приходит к сегодняшней дате, после выбирает старые даты. А мне надо начинать с сегодняшней даты, после старые даты, а после будущие даты

Amin Maharram
Так и делаю, но результат не тот)

скиньте пример=) Как он может быть не тот, я не знаю) в этом суть сортировки как раз, чтобы упорядочить данные

Amin-Maharram Автор вопроса
Roman Sergeev
Order by case

Спасибо большое, попробую)

Amin Maharram
Он идет с будущей датой, потом приходит к сегодняш...

ну сделайте через union тогда. 3 селекта. 1 выберет сегодняшние даты + поле для order, какой-нибудь 1 as order_number 2 селект выберет даты меньше сегодняшней + поле 2 as order_number 3 выберет даты больше сегодняшней + поле 3 as order_number и затем order by order_number

Alexey Bulgakov
представляю скорость этого решения

оверхед не сильный будет. Индекс тот же, прогруженный в shared_buffers, + worker'ы могут параллельно выполнить запрос. Зато будет более понятный запрос

Alexey Bulgakov
3 прохода вместо одного...

и что? сложность одна. По сути, только на итерацию. Вы серьёзно думаете, что для btree это будет проблема?

Anatoliy Burov
и что? сложность одна. По сути, только на итерацию...

зачем? когда можно использовать обычный case

Alexey Bulgakov
3 прохода вместо одного...

три частичных прохода. или у вас индексов нет совсем?

Alexey Bulgakov
представляю скорость этого решения

А тут надо понять, что вообще нужно. Я подозреваю, это какая-то интерфейсная идея с упорядочиванием условных тикетов для исполнителей. Если так, то решение надо делать с учётом пейджинации, используемого ORM и пр

Darafei Praliaskouski
три частичных прохода. или у вас индексов нет совс...

если есть индекс - то писать кривой метод с 3 проходами?

Alexey Bulgakov
если есть индекс - то писать кривой метод с 3 прох...

Да что хотите пишыте. Просто если там есть проход по индэксу вместо сортировки в памяти -- то это вероятно будет на копейку быстрее, чем выдумывать варжэние сортировки -- которое простое, но скорее всего заставить постгрес его выводить из индэкса не получится.

Amin-Maharram Автор вопроса
Roman Sergeev
Order by case

order by CASE WHEN (started_at::date >= CURRENT_DATE) THEN 0 ELSE 1 END desc nulls last Вроде так получилось, но он почему-то nulls не добавляет в конец и реузльтат какой-то смешанный

Alexey Bulgakov
если есть индекс - то писать кривой метод с 3 прох...

я не согласен, что подход кривой с 3 проходами. Сложность алгоритма в целом не меняется. а из плюсов: 1) можно построить 3 индекса вместо 1. Если рассматривать пограничный кейс на больших данных, вам не хватит ОЗУ прогрузить полностью индекс, а в моём решении можно будет прогрузить 3 маленьких индекса, если не разом, то по отдельности. 2) касательно понимания запроса - это лучше, т.к логически выделены участки, которые дают определённую выборку. И если бы сохранялся ордеринг при union, что в принципе, в будущем может и будет сделано (почему бы и нет? например какой-нибудь ordered union?:) ), то можно вообще будет затем данные не сортировать.

Amin Maharram
order by CASE WHEN (started_at::date >= CURRENT_DA...

Это пишэтся как ORDER BY started_at::date < CURRENT_DATE nulls last заодно и нуллы поправятся. (Правда, тут наоборот сначала будущие даты -- но так и в вашэм выражэнии).

Вон то выражэние, которое вы указали так пишэтся, а не вся сортировка.

Ilya Anfimov
Да что хотите пишыте. Просто если там есть проход ...

что там выдумывать? 20 символов. вариант с union как раз выдумка и выглядит как монстр и работает медленнее и главное подход к решению неверный. а потом где-то не будет индекса...

Alexey Bulgakov
что там выдумывать? 20 символов. вариант с union к...

аргументируйте, почему подход медленнее работает? вы же понимаете, что 3 * N/3 даёт N?:) как и в случае с полным, пусть даже Index only scan, будет N Вы серьёзно думаете, что итератор, который ничего не делает, даёт существенные накладные расходы?) у вас есть пирог. вы поделили его на 3 части и начали есть. вы утверждаете, что если бы вы его на 3 части не поделили, вы слопали бы его быстрее:)

Anatoliy Burov
аргументируйте, почему подход медленнее работает? ...

это же сортировка, а не выборка. по фильтру выберется условно 100 строк и дальше сортировка

Похожие вопросы

Обсуждают сегодня

Всем привет! Имеется функция: function IsValidChar(ch: UTF8Char): Boolean; var i: Integer; ValidChars: AnsiString; begin ValidChars := 'abcdefghijklmnopqrstuvwxyzABCDE...
Евгений
44
И никого не интересует какие пакеты кто использует. ((% Заходишь на сайт симфони и видишь поддержку Украины - по законам РФ это ж экстремизм. Только никто не отказывается от с...
Am Ambrion
11
лучше скажите, причём тут паскаль?
Alexey Kulakov
36
Чтобы перехватить все нажимания буков на форме, надо хук ставить? Пробовал на форме ОнКейДаун, оно ловит клаву если фокус не на компоненте с вводом текста
Serjone
15
Но, может, есть уже проверенная? Наши требования такие: 1. Сообщения должны приходить из Инста в CRM оду 2. Должна быть возможность подключить несколько экаунтов Инстаграм. Р...
Alexander Sharoiko MSE / Александр Шаройко
7
Народ! Впервые клиенту пришло письмо от РКН, у вас, дескать, есть яндекс метрика, а нигде не написано, что вы ее юзаете. Никто не сталкивался?
Sasha Beep
14
Всем привет! вывожу на общей стр дочерние ресурсыв каждом ресурсе галерея, и первая фотка должна выводиться на общей [!DocLister? &prepare=photo !]
Alekso
12
Я правильно понимаю что нет способов получить список ожидающих заявок на вступление в группу с помощью бота из mtproto?
Шамиль Прилов
7
А можно вопрос? Мне сегодня сказали что у меня функция (которая просто заполняет массив значениями) не правильная void Full(double * arr, int n) { for (int i = 0; i < n; i...
† C E †
7
Добрый вечер. Хочу чтобы у меня в классе поле было функцией, которая возвращает строку. Делаю так: interface ... TGetOutPath = function : String of object; ... protec...
Kirill Filippenok
12
Карта сайта