作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一些 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
多条记录的order_date可能相同,订单号未必总是升序排列。在这方面按 ID 排序安全吗?
最佳答案
您应该按 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
作为辅助排序键,希望在最近的 上获得最新的值订单日期
。这假定 id
是 serial
或 bigserial
列。
只要在创建记录后不允许更改 order_date
,您就可以安全地使用 order by id desc
。但是,如果您order by order_date desc, id desc
那么您的意图将立即显而易见,维护您的代码的人(可能是您)可能会在您准确地说出您的意思时欣赏它。
关于sql - 检索客户的最后一个挂单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7369916/
我是一名优秀的程序员,十分优秀!