Presto - статическая дата и временная метка в разделе where
Я уверен, что следующий запрос использовался для меня на Presto:
select segment, sum(count)
from modeling_trends
where segment='2557172' and date = '2016-06-23' and count_time between '2016-06-23 14:00:00.000' and '2016-06-23 14:59:59.000';
group by 1;
теперь, когда я запускаю его (на Presto 0.147 на EMR), я получаю сообщение об ошибке при попытке присвоить varchar date/timestamp..
Я могу заставить его работать, используя:
select segment, sum(count)
from modeling_trends
where segment='2557172' and date = cast('2016-06-23' as date) and count_time between cast('2016-06-23 14:00:00.000' as TIMESTAMP) and cast('2016-06-23 14:59:59.000' as TIMESTAMP)
group by segment;
но он чувствует себя грязным...
есть ли лучший способ сделать это?
Ответы
Ответ 1
В отличие от некоторых других баз данных, Presto автоматически не конвертирует между varchar и другими типами даже для констант. Литье работает, но более простым способом является использование конструкторов типов:
WHERE segment = '2557172'
AND date = date '2016-06-23'
AND count_time BETWEEN timestamp '2016-06-23 14:00:00.000' AND timestamp '2016-06-23 14:59:59.000'
Здесь вы можете увидеть примеры для разных типов: https://prestodb.io/docs/current/language/types.html
Ответ 2
Просто подумайте, пытались ли вы пропустить тире в свою дату? попробуйте 20160623
вместо 2016-06-23
.
Я столкнулся с чем-то похожим с SQL-сервером, но не использовал Presto.