4

我想NOW()从另一个表中减去分钟和“多少分钟”的值:

SELECT * FROM A, B 
WHERE 
   A.entity_type_id = B.entity_type_id  
   AND A.status = 'PENDING'  
   AND A.request_time < (NOW() - INTERVAL B.retry_interval MINUTE) 
   AND A.retry_count >= B.retry_allowed_count

这里的问题是B.retry_interval从另一个表中获取的,而通常像这样的查询是A.request_time < (NOW() - INTERVAL '10 MINUTE')

我如何实现这一目标?

4

2 回答 2

5

将间隔乘以interval '1 minute'

SELECT *
FROM A, B 
WHERE 
   A.entity_type_id = B.entity_type_id  
   AND A.status = 'PENDING'  
   AND A.request_time < NOW() - B.retry_interval * INTERVAL '1 minute'
   AND A.retry_count >= B.retry_allowed_count
于 2013-04-15T12:59:25.360 回答
1

我知道它已经够老了,但我在这里做什么。顺便说一句,我的 postgres 版本是 9.4.18。

尝试使用区间数据类型。将列中的数字转换为 sting 并将其连接起来。

   SELECT * 
   FROM A, B WHERE 
   A.entity_type_id = B.entity_type_id  
   AND A.status = 'PENDING'  
   AND A.request_time < (NOW() - concat(B.retry_interval::text,'minute')::interval
   AND A.retry_count >= B.retry_allowed_count

感谢我的同事发现“间隔”数据类型

于 2019-06-27T06:47:01.377 回答