POSTGRESQL限制给定条件的结果查询

时间:2018-05-03 09:29:43

标签: sql postgresql case limit .when

POSTGRESQL中是否有办法限制给定条件的结果查询?

我尝试过这样的事情:

SELECT * 
FROM table 
LIMIT CASE 
       WHEN extract(hour from now())=9 then 143
       WHEN extract(hour from now())=10 then 178 ETC.`

我需要使用它,因为根据表中的当前小时和小时,dinamically限制条件。

有什么想法或想法吗?

2 个答案:

答案 0 :(得分:1)

https://www.postgresql.org/docs/current/static/queries-limit.html

  

LIMIT {number |所有}

您不能在此处使用表达式,就像使用ORDER BY

一样

https://www.postgresql.org/docs/current/static/queries-order.html

  

ORDER BY sort_expression1 [ASC | DESC] [NULLS {第一个|最后}]                [,sort_expression2 [ASC | DESC] [NULLS {第一个|最后}] ...]

这里需要动态SQL,例如查看PostgreSQL parameterized Order By / Limit in table function

答案 1 :(得分:1)

您可以使用row_number()

SELECT t.* 
FROM (SELECT t.*, ROW_NUMBER() OVER (ORDER BY ?) as seqnum
      FROM table t
     ) t
WHERE (extract(hour from now()) = 9 AND seqnum <= 143) OR
      (extract(hour from now()) = 10 AND seqnum <= 178) OR
      . . . 

更有可能在应用层处理此问题。

注意?:这表示用于排序数据的列。通常在使用LIMIT时,您需要ORDER BY