您使用了不正确的子查询语法:
select url,dns_time,update_Time
from dns_lookup_table
where url in('url1', 'url2','url3')
and update_time=max(select to_char(update_time,'YYYY-MM-DD HH24:MI'));
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
您忘记将子查询包装在括号中:
and update_time=max((select to_char(update_time,'YYYY-MM-DD HH24:MI')));
^ ^
|-------------- extra parens --------------------|
但在这种情况下,您根本不需要子查询,您可以通过简单的嵌套调用函数:
and update_time=max(to_char(update_time,'YYYY-MM-DD HH24:MI'));
不过,这仍然是无稽之谈。您正在与update_time
to 的文本转换update_time
进行比较text
。这没有任何意义。你为什么还要update_time
和它自己比较呢?也许您打算对FROM
另一个表进行子查询?如果是这样,你通常最好做一个简单的连接。
您的进一步评论表明您确实想要date_trunc
. 如果我广泛猜测您要做什么:
选择与表中update_time
最新的相同的所有行,忽略秒数update_time
...那么你可能会写:
SELECT url,dns_time,update_Time
FROM dns_lookup_table
WHERE url IN ('url1','url2','url3')
and date_trunc('minute',update_time) = (
SELECT date_trunc('minute', max(update_time))
FROM dns_lookup_table
WHERE url IN ('url1','url2','url3')
);
尽管这不会使用您可能update_time
为过滤器定义的任何索引。您需要在date_trunc('minute', update_time)
要使用的查询上创建索引或重新措辞,BETWEEN
并从INTERVAL
.