Как привести unix отметку времени в качестве даты и извлечь из нее месяц в Presto SQL - PullRequest
1 голос
/ 13 марта 2020

У меня следующий запрос:

    select cast(ov.ingestion_timestamp as date), date(ov.date_id), cast(ov.main_category as varchar), 
    sum(cast(ov.order_target as int)),
    sum(cast(ov.gmv_target as int))
    from tableA ov 
    inner join tableB cb
    on date(ov.date_id) = date(cb.ingestion_timestamp)
    inner join tableC loc  
    on date(ov.date_id) = date(loc.ingestion_timestamp)
    where MONTH(date(ov.ingestion_timestamp)) = month(current_date)
group by 1,2,3

enter image description here

Я хотел бы получить записи, в которых месяц столбца ingestion_timestamp равен текущему месяцу .. Все значения столбцов хранятся как объекты, поэтому мне нужно привести их к соответствующим типам данных. Могу ли я узнать, как я могу извлечь месяц из столбца ingestion_timestamp , пожалуйста?

Спасибо.

1 Ответ

0 голосов
/ 13 марта 2020

Я бы предложил не cast вводить в предложении where: это неэффективно, потому что функцию необходимо применять к каждой строке перед фильтрацией.

Вместо этого вы можете вычислить временную метку, соответствующую начало месяца, и это для прямой фильтрации:

where ingestion_timestamp >= to_unixtime(date_trunc(month, current_date))

Если у вас есть даты в будущем, вы можете добавить верхний предел ограничения

where 
    ingestion_timestamp >= to_unixtime(date_trunc(month, current_date))
    and ingestion_timestam < to_unixtime(date_trunc(month, current_date) + interval '1' month)
...