#sql #postgresql #ruby-on-rails-3
#sql #postgresql #ruby-on-rails-3
Вопрос:
Моя база данных postgresql продолжает возвращать одну и ту же последнюю строку при заказе по created_at (метка времени) и ограничивает количество результатов.
Последним результатом всегда является одна и та же строка. Взгляните на последний идентификатор в этих результатах:
looked=# select id,created_at from businesses order by created_at asc limit 2;
id | created_at
---- -------------------------------
38 | 2011-04-30 18:31:23.923475 10
20 | 2011-04-30 18:31:23.923475 10
(2 rows)
looked=# select id,created_at from businesses order by created_at asc limit 5;
id | created_at
------ -------------------------------
38 | 2011-04-30 18:31:23.923475 10
436 | 2011-04-30 18:31:23.923475 10
1334 | 2011-04-30 18:31:23.923475 10
2845 | 2011-04-30 18:31:23.923475 10
20 | 2011-04-30 18:31:23.923475 10
(5 rows)
looked=# select id,created_at from businesses order by created_at asc limit 10;
id | created_at
------ -------------------------------
38 | 2011-04-30 18:31:23.923475 10
436 | 2011-04-30 18:31:23.923475 10
1334 | 2011-04-30 18:31:23.923475 10
2845 | 2011-04-30 18:31:23.923475 10
3381 | 2011-04-30 18:31:23.923475 10
1089 | 2011-04-30 18:31:23.923475 10
822 | 2011-04-30 18:31:23.923475 10
2310 | 2011-04-30 18:31:23.923475 10
1773 | 2011-04-30 18:31:23.923475 10
20 | 2011-04-30 18:31:23.923475 10
(10 rows)
Комментарии:
1. Значения одинаковы, потому что это мои исходные данные, и я выбрал установить все значения created_at в NOW (). Есть ли способ лучше?
Ответ №1:
Все created_at
значения одинаковы. ПОРЯДОК ПО и ОГРАНИЧЕНИЕ будут произвольно выбирать строки из набора строк, где created_at
наименьшее значение
Вам пришлось бы добавить дополнительное условие сортировки для «разрыва связей» этих строк. Здесь я добавил id
select id,created_at from businesses
order by created_at asc, id limit 5;
Ответ №2:
Значение created_at для каждой строки идентично. Postgres произвольно разрывает связи. Добавьте другое условие заказа (например, по идентификатору), если вы хотите больше контроля / предсказуемости.