按动态列排序

时间:2019-04-11 16:59:52

标签: postgresql

我在PostgreSQL中有一个items表,其中有4列:start_price,end_price,start_date,duration。

我想支持查询以返回由current_price排序的商品,该价格由配方商如下计算

current_price = start_price + (end_price - start_price) * (current_time - start_date) / duration

如何设计此类表和current_price列,使其具有可伸缩性和高性能以支持数百万行?

1 个答案:

答案 0 :(得分:1)

您可以通过定义CTE来实现。

例如:

WITH c AS (
 SELECT
  start_price, 
  end_price, 
  start_date, 
  duration,
  start_price 
      + (end_price - start_price) * (current_time - start_date) 
      / duration AS current_price
FROM items
)
SELECT
  start_price, 
  end_price, 
  start_date, 
  duration,
  current_price
FROM c
ORDER BY current_price DESC;

您可以将此查询包装到函数或视图中。

希望有帮助。