POSTGRESQL中是否有办法限制给定条件的结果查询?
我尝试过这样的事情:
SELECT *
FROM table
LIMIT CASE
WHEN extract(hour from now())=9 then 143
WHEN extract(hour from now())=10 then 178 ETC.`
我需要使用它,因为根据表中的当前小时和小时,dinamically限制条件。
有什么想法或想法吗?
答案 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
。