Я пытаюсь создать таблицу в Snowflake с интервалом 15 минут. Я пробовал с генератором, но это не дает в интервале 15 минут. Есть ли какая-либо функция, которую я могу использовать для создания и построения этой таблицы с данными за пару лет.
Такие как
Дата | Час |
---|---|
202-03-29 | 02:00 |
202-03-29 | 02:15 |
202-03-29 | 02:30 |
202-03-29 | 02:45 |
202-03-29 | 03:00 |
202-03-29 | 03:15 |
......... | ........ |
......... | ........ |
Спасибо
Используйте следующий генератор времени с 15-минутным интервалом, а затем используйте другие функции даты и времени по мере необходимости, чтобы извлечь часть даты или часть времени в отдельных столбцах.
with CTE as
(select timestampadd(min,seq4()*15 ,date_trunc(hour, current_timestamp())) as time_count
from table(generator(rowcount=>4*24)))
select time_count from cte;
+-------------------------------+
| TIME_COUNT |
|-------------------------------|
| 2022-03-29 14:00:00.000 -0700 |
| 2022-03-29 14:15:00.000 -0700 |
| 2022-03-29 14:30:00.000 -0700 |
| 2022-03-29 14:45:00.000 -0700 |
| 2022-03-29 15:00:00.000 -0700 |
| 2022-03-29 15:15:00.000 -0700 |
.
.
.
....truncated output
| 2022-03-30 13:15:00.000 -0700 |
| 2022-03-30 13:30:00.000 -0700 |
| 2022-03-30 13:45:00.000 -0700 |
+-------------------------------+
На этот вопрос уже есть много ответов часере (эти 4 — все в этом месяце).
Но важно отметить, что вы НЕ ДОЛЖНЫ использовать SEQx()
в качестве генератора чисел (вы можете использовать его в ORDER BY, но это не обязательно). Как указано в доктора
Important
This function uses sequences to produce a unique set of increasing integers, but does not necessarily produce a gap-free sequence. When operating on a large quantity of data, gaps can appear in a sequence. If a fully ordered, gap-free sequence is required, consider using the ROW_NUMBER window function.
CREATE TABLE table_of_2_years_date_times AS
SELECT
date_time::date as date,
date_time::time as time
FROM (
SELECT
row_number() over (order by null)-1 as rn
,dateadd('minute', 15 * rn, '2022-03-01'::date) as date_time
from table(generator(rowcount=>4*24*365*2))
)
ORDER BY rn;
затем выберите верх/низ:
(SELECT * FROM table_of_2_years_date_times ORDER BY date,time LIMIT 5)
UNION ALL
(SELECT * FROM table_of_2_years_date_times ORDER BY date desc,time desc LIMIT 5)
ORDER BY 1,2;
ДАТА | ВРЕМЯ |
---|---|
2022-03-01 | 00:00:00 |
2022-03-01 | 00:15:00 |
2022-03-01 | 00:30:00 |
2022-03-01 | 00:45:00 |
2022-03-01 | 01:00:00 |
2024-02-28 | 22:45:00 |
2024-02-28 | 23:00:00 |
2024-02-28 | 23:15:00 |
2024-02-28 | 23:30:00 |
2024-02-28 | 23:45:00 |
Можно ли использовать timstampadd, а затем повторить, чтобы получить нужные строки. выберите метку времени (мин, 45, текущая метка_времени());