LIST-OF-DAYS = SELECT day FROM TABLE1
day
---------------------
2014-01-20 00:00:00
2014-01-21 00:00:00
2014-01-22 00:00:00
我想通过以上结果删除/过滤数据 LIST-OF-DAYS
如何在SELECT datetime, value FROM TABLE2
datetime | volume
-----------------------+--------
2014-01-02 01:14:00.5 | 364
2014-01-20 01:15:01.5 | 149
2014-01-22 01:15:01.5 | 149
SELECT * FROM TABLE2 WHERE (TABLE2.datetime in LIST_OF_DAYS)
顺便说一句, TABLE2
上有一列日期时间因此,
datetime | volume
-----------------------+--------
2014-01-20 01:15:01.5 | 149
2014-01-22 01:15:01.5 | 149
答案 0 :(得分:0)
SELECT * FROM TABLE2 where day in (SELECT day FROM TABLE1);
这只是一个如何在另一个查询中使用查询结果的示例。 where子句将仅选择 TABLE2 中' 列值与 TABLE1' day'匹配的行。 列值。
答案 1 :(得分:0)
您希望来自table2
的行,其中day
列中的值存在于table1.day
中。为此使用[INNER] JOIN
数据类型还有一些复杂性。您拥有它的方式,数据类型为timestamp
:
SELECT t2.*
FROM table1 t1
JOIN table2 t2 ON t2.datetime >= t1.day
AND t2.datetime < t1.day + interval '1 day';
如果您对table1.day
使用date
(t2.datetime
仍然是时间戳),则更简单:
SELECT t2.*
FROM table1 t1
JOIN table2 t2 ON t2.datetime >= t1.day
AND t2.datetime < t1.day + 1; -- just add int to date
还有一个较短的形式:
JOIN table2 t2 ON t2.datetime::date = t1.day::date
但上面的长版本为sargable,可以在table2.datetime
上使用索引。