我有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安排?
答案 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
的最新值。这假定id
是serial
或bigserial
列。
只要在创建记录后不允许更改order by id desc
,您就可以安全地使用order_date
。但是,如果你order by order_date desc, id desc
那么你的意图就会立即显而易见,维护你的代码的人(可能是你)在你说出你的意思时可能会很感激。
答案 1 :(得分:0)
您可以进行前N分析并找到与日期和状态相关的最高记录