получение последнего отложенного ордера клиента - PullRequest
1 голос
/ 10 сентября 2011

У меня есть Order, созданные Customers, хранящиеся в postgres дБ. Некоторые из ордеров могут иметь статус 'pending'. Я хочу, чтобы пользователь мог работать с последним отложенным ордером.

стол заказов

id   | order_num | order_date |customer_id | status
-----+-----------+------------+------------+---------
80   | 1234      | 02-01-2000 | 20         | pending
----------------------------------------------------
81   | 2345      | 02-01-2000 |20          | confirmed
-----------------------------------------------------
82   | 3456      | 02-01-2000 |20          | pending
--------------------------------------------------
83   | 3498      | 02-001-2000|  20        | confirmed
----------------------------------------------------

Что-то не так с использованием

select * from orders where customer_id =20 and status='pending' order by id DESC limit 1

Дата заказа для нескольких записей может быть одинаковой. Номер заказа не всегда может быть в порядке возрастания. В этом отношении безопасен ли заказ по id?

Ответы [ 2 ]

1 голос
/ 10 сентября 2011

Вы должны заказать по order_date с id в качестве вторичного ключа сортировки:

select *
from orders
where customer_id = 20
  and status      = 'pending'
order by order_date desc, id desc
limit 1

Вам нужен самый последний ордер, поэтому вы должны сортировать, чтобы выразить это намерение. Вам также нужно иметь дело с дублирующимися значениями order_date, чтобы вы могли добавить id в качестве дополнительного ключа сортировки, чтобы, надеюсь, получить самый последний из самых последних order_date. Это предполагает, что id - это столбец serial или bigserial.

Вы, вероятно, можете безопасно использовать order by id desc, если order_date не разрешено изменять после создания записи. Однако, если вы order by order_date desc, id desc, то сразу же станет ясно, каково ваше намерение, люди, поддерживающие ваш код (возможно, вы), могут оценить это, когда вы точно скажете, что вы имеете в виду.

0 голосов
/ 10 сентября 2011

Вы можете выполнить Top-N-Analysis и найти самую верхнюю запись по дате и статусу

...