在PostgreSQL中将查询子集化为日期列表(跨两列)的最有效方法?

时间:2019-02-18 10:50:59

标签: sql postgresql

我正在查询PG数据库中的一个表,该表包含一个id of propsperiod)和一个character varying(255)value),看起来像:

integer

加入几次后,我希望对结果集进行子集化,以仅包括这些期间/值组合的子集,例如,我可能只需要3个月,6个月和5年(因此不需要1周)。

我通常会到达|period|value| |Months|3 | |Months|6 | |Weeks |1 | |Years |5 | ,但是我认为我不能跨两列这样做。相反,我尝试通过以下方式制作复合列:

WHERE IN(..)

产生一列CURRENT_DATE + CAST(CONCAT(tbl.value, tbl.period) AS INTERVAL),然后可以用timestamp对其进行子集化。

这有效,但不是特别漂亮或高效。有更好的方法吗?

我可以自由更改查询(因此我可以按当前日期或IN('2019-05-18', '2019-08-18', '2024-02-18')3来按日期进行子集设置),但重要的是我不知道提前2年是否会被保存为24个月(我也无法控制表格)。

谢谢!

1 个答案:

答案 0 :(得分:3)

你可以说

WHERE (period, value) IN (('months', 5), ...)

并在两列上都使用索引。

我希望语法正确;某处可能缺少ROW