Snowflake SQL: получите записи за последний день месяца - PullRequest
0 голосов
/ 30 сентября 2019

Там, где обычно используют EOMonth, в Snowflake такой функции нет. У них есть LAST_DAY, но до сих пор я не смог заставить его работать. Кто-нибудь видит, что я неправильно сделал ниже ИЛИ есть обходной путь к EOMonth в Snowflake?

Мои попытки:

SELECT *
FROM "NORCO"."UNITS_SNAPSHOT" AS US1
WHERE US1.CCODE LIKE '%514-L%' AND 
US1.TIMESTAMP=(SELECT LAST_DAY(US1.TIMESTAMP,'MONTH') 
               FROM "NORCO"."UNITS_SNAPSHOT" AS US2 WHERE US1.CCODE=US2.CCODE)

и

SELECT *
FROM "NORCO"."UNITS_SNAPSHOT" AS US1
WHERE US1.CCODE LIKE '%514-L%' AND 
US1.TIMESTAMP=LAST_DAY(US1.TIMESTAMP,'MONTH')

То, что я ожидаю от возврата из таблицы ежедневных записей, - это последние записи месяца. Предложения, помощь или идеи приветствуются !!

Спасибо всем

Ответы [ 2 ]

1 голос
/ 05 октября 2019

Я был бы уверен, что типы данных идентичны, т.е. DATE, поэтому небольшое изменение:

SELECT *
FROM "NORCO"."UNITS_SNAPSHOT" AS US1
WHERE US1.CCODE LIKE '%514-L%' AND 
US1.TIMESTAMP::DATE=(SELECT LAST_DAY(US1.TIMESTAMP, MONTH) 
                     FROM "NORCO"."UNITS_SNAPSHOT" AS US2 WHERE US1.CCODE=US2.CCODE)

Мне трудно понять, чего пытается достичь этот запрос и почему он должен коррелироваться. Нужно ли искать набор CCODE с TIMESTAMP EOM? Если это так, то некоторые упрощения:

SELECT *
FROM "NORCO"."UNITS_SNAPSHOT" AS us
WHERE us.CCODE LIKE '%514-L%' AND 
us."TIMESTAMP"::DATE=LAST_DAY(us."TIMESTAMP", MONTH) 
0 голосов
/ 01 октября 2019

Усечение компонента времени также можно выполнить следующим образом:

select * from (выберите CURRENT_TIMESTAMP dt), где dt> = last_day (dt) и dt

...