假设这个非常简单的SQL查询:
SELECT * FROM a WHERE time < '2010-01-01'
现在,我如何组装一个查询,其中时间部分实际上是一个'数组'?
以某种方式之间:
SELECT * FROM a WHERE time < ['2010-01-01', '2012-01-01']
Select应该执行两次,但会产生一个结果集。
请注意,此示例数组只包含两个项目,但它可能包含更多项目,因为结果实际上来自子查询。
Postgresql 9.3
答案 0 :(得分:1)
ANY适用于此,例如:
SELECT * FROM a WHERE time < ANY (SELECT '2010-01-01' UNION ALL SELECT '2012-01-01')
答案 1 :(得分:0)
也许您提供了错误的示例SQL,因为SELECT * FROM a WHERE time < '2012-01-01'
将为您提供所有日期,包括'2010-01-01'
如果您只想将两个结构相同的reult集合并为一个,那么UNION
运算符将在此为您提供帮助:
SELECT * FROM a WHERE time < '2010-01-01'
UNION
SELECT * FROM a WHERE time < '2012-01-01'
如果您想在两个查询中都包含< '2010-01-01'
的结果,则需要使用UNION ALL
答案 2 :(得分:0)
这应该可以解决问题 - 使用ANY
,如下所示:
select *
from a
where time < any(array['2010-01-01'::timestamp, '2012-01-01'::timestamp])
答案 3 :(得分:0)
如果你说Time来自子查询,你可以将该子查询包含在Non Equi join(&lt;)中:
SELECT DISTINCT A.*
FROM Table_1 AS A
INNER JOIN (SELECT DISTINCT Time FROM DATE_Array_Table) AS B
on (A.Time < B.Time)
表上有INNER JOIN,其中包含日期数组,在这种情况下,您将获得重复项,但只查询具有不同值的表A将很容易解决这个问题。
在这种情况下,您将拥有多少时间值(1,2,3,4,...)并不重要。您已经写过您的最终查询是聚合的,因此请注意我的解决方案中的重复。