检索客户的最后挂单

时间:2011-09-10 05:50:59

标签: sql postgresql select

我有Order创建的一些Customers存储在postgres db中。某些订单可能有'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

多条记录的order_date可能相同。订单号可能并不总是按升序排列。在这方面是否通过id安排?

2 个答案:

答案 0 :(得分:1)

您应该使用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的最新值。这假定idserialbigserial列。

只要在创建记录后不允许更改order by id desc,您就可以安全地使用order_date。但是,如果你order by order_date desc, id desc那么你的意图就会立即显而易见,维护你的代码的人(可能是你)在你说出你的意思时可能会很感激。

答案 1 :(得分:0)

您可以进行前N分析并找到与日期和状态相关的最高记录