Я не могу сгруппировать по дате из столбца отметки времени в запросе ниже:
CHG_TABLE +----+--------+----------------+-----------------+-------+-----------+ | Key|Seq_Num | Start_Date | End_Date | Value |Record_Type| +----+--------+----------------+-----------------+-------+-----------+ | 1 | 1 | 5/25/2019 2.05 | 12/31/9999 00.00| 800 | Insert | | 1 | 1 | 5/25/2019 2.05 | 5/31/2019 11.12 | 800 | Update | | 1 | 2 | 5/31/2019 11.12| 12/31/9999 00.00| 900 | Insert | | 1 | 2 | 5/31/2019 11.12| 6/15/2019 12.05 | 900 | Update | | 1 | 3 | 6/15/2019 12.05| 12/31/9999 00.00| 1000 | Insert | | 1 | 3 | 6/15/2019 12.05| 6/25/2019 10.20 | 1000 | Update | +---+---------+----------------+-----------------+-------+-----------+
RESULT: +-----+------------------+----------------+-----------+----------+ | Key | Month_Start_Date | Month_End_Date |Begin_Value|End_Value | +---- +------------------+----------------+-----------+----------+ | 1 | 6/1/2019 | 6/30/2019 | 1700 | 1000 | | 1 | 7/1/2019 | 7/31/2019 | 1000 | 1000 | +-----+------------------+----------------+-----------+----------+
Begin_Value: Sum (Value) for Max (Start_Date) ‹Месяц_Start_Date -> Следует выбрать последнюю дату с прошлого месяца
End_Value: Sum (Value) for Max (Start_Date) ‹= Month_End_Date -> Следует выбрать самую последнюю дату
SELECT k.key,
dd.month_start_date,
dd.month_end_date,
gendata.value first_value,
gendata.next_value last_value
FROM dim_date dd CROSS JOIN dim_person k
JOIN (SELECT ct.key,
dateadd('day',1,last_day(ct.start_date)) start_date ,
SUM(ct.value),
lead(SUM(ct.value)) OVER(ORDER BY ct.start_date) next_value
FROM (SELECT key,to_char(start_Date,'MM-YYYY') MMYYYY, max(start_Date) start_date
FROM CHG_TABLE
GROUP BY to_char(start_Date,'MM-YYYY'), key
) dt JOIN CHG_TABLE ct ON
dt.start_date = ct.start_date AND
dt.key = ct.key
group by ct.key, to_char(start_Date,'MM-YYYY')
) gendata ON
to_char(dd.month_end_date,'MM-YYYY') = to_char(to_char(start_Date,'MM-YYYY')) AND
k.key = gendata.key;
Ошибка:
start_Date is not a valid group by expression
Связанное сообщение: Ежемесячный снимок с использованием измерения даты
dateadd
не является функцией Oracle, и, помимо прочего, у вас есть лишняя запятая. Но вы не сказали, какую ошибку вы получите, когда попробуете это. Объясните, что вы пытаетесь сделать, с примерами данных и ожидаемыми результатами. См. минимальный воспроизводимый пример и как задать хороший вопрос. - person Alex Poole   schedule 22.07.2019group by ct.key, to_char(start_Date,'MM-YYYY')
должно бытьgroup by ct.key, MMYYYY
, чтобы использовать выражение столбца с псевдонимом из внутреннего запроса. Но я не знаю и не имею доступа к Snowflake, поэтому не могу комментировать дальше, если вам действительно не нужна версия только для Oracle. - person Alex Poole   schedule 22.07.2019