我正在查询PG数据库中的一个表,该表包含一个id of props
(period
)和一个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个月(我也无法控制表格)。
谢谢!
答案 0 :(得分:3)
你可以说
WHERE (period, value) IN (('months', 5), ...)
并在两列上都使用索引。
我希望语法正确;某处可能缺少ROW
。