【发布时间】:2011-08-04 13:07:36
【问题描述】:
我有一个带有 (order_id, timestamp) 的表。时间戳代表未来可能发生的订单交货日期。如何使用一个 select 语句获取从现在开始的最后 5 个订单和从现在开始的下 5 个订单?是否可以在不使用联合查询的情况下在 sql 中执行此操作?像这样,但没有联合:
select * from table where timestamp <= current_timestamp
order by timestamp desc limit 5
union
select * from table where timestamp >= current_timestamp
order by timestamp asc limit 5
【问题讨论】:
-
SQL 不错,但是我觉得从未来选择5个订单还不够好。 (想想
timestamp >= current_timestamp的含义。)真正的 问题是什么? -
更新了问题,订单时间戳很可能>= current_timestamp。
-
您使用什么 DBMS?为什么不想使用 UNION?
-
PostgreSQL。我想一定有比使用联合查询更聪明的方法。但如果我所拥有的已经是最优化的查询,我想我将不得不接受它。
-
是的,这就是想法,但您应该使用 UNION ALL 而不是 UNION 并将“
标签: sql postgresql timestamp sql-order-by