#sql #snowflake-cloud-data-platform
Вопрос:
Вот еще несколько деталей, так как немного сложно четко задать этот вопрос в предложении:
В принципе, у меня есть таблица с некоторыми из следующих полей:
| ID | date | start_date | amount_paid | last_amount_paid | field |
| -------- | ---------------------| ----------------------| ----------- | ---------------- | ---------- |
| ID_00001 | 2020-08-01 00:00:00 | 2019-11-06 20:23:36 | 0 | 0 | cosmetics |
| ID_00002 | 2020-08-02 00:00:00 | 2018-10-06 10:34:21 | 10 | 0 | finance |
| ... | ... | ... | ... | ... | ... |
| ID_99999 | 2021-11-06 00:00:00 | 2020-08-01 11:54:47 | 15 | 10 | software |
Я хочу добавить столбец «месяцы», который подсчитывает количество месяцев между датой начала и датой для каждого идентификатора, например:
| ID | date | start_date | ... | months |
| -------- | ---------------------| ----------------------| ---- | ---------- |
| ID_00001 | 2020-08-01 00:00:00 | 2019-11-06 20:23:36 | ... | 9 |
| ID_00002 | 2020-08-02 00:00:00 | 2018-10-06 10:34:21 | ... | 22 |
| ... | ... | ... | ... | ... |
| ID_99999 | 2021-11-06 00:00:00 | 2020-08-01 11:54:47 | ... | 15 |
Затем я хочу сгруппировать все идентификаторы, которые начали (первая дата начала) одновременно (т. Е. Я хочу сгруппировать пользователей по количеству месяцев).
Мне трудно сосредоточиться на том, чтобы сделать это с помощью SnowflakeSQL.
Цель здесь в основном состоит в том, чтобы отслеживать доходы по группам в зависимости от того, когда они присоединились. пожалуйста, дайте мне знать, если мой подход неверен, и как бы вы это реализовали.
Очень признателен!
Ответ №1:
Использование вычисленного/сгенерированного столбца и файла ДАТЫ:
CREATE OR REPLACE TABLE t(id TEXT,
date DATE,
start_date DATE,
months INT AS (DATEDIFF(MONTH, start_date, date))
);
Примеры данных:
INSERT INTO t(id, date, start_date)
SELECT 'ID_00001', '2020-08-01 00:00:00', '2019-11-06 20:23:36'
UNION SELECT 'ID_00002', '2020-08-02 00:00:00', '2018-10-06 10:34:21';
SELECT * FROM t;
Выход:
Настороженно оборачивающий стол с видом:
CREATE VIEW t_vw
AS
SELECT t.id, t.start_date, t.date, DATEDIFF(MONTH, start_date, date) AS months
FROM t;