# #sql #google-bigquery
Вопрос:
Допустим, у меня есть этот простой запрос (два столбца даты-это МЕТКА ВРЕМЕНИ).:
SELECT
Song_Name, Artist_Name, Album_Name, Genre, Sub_Genres, Song_Length_Seconds, On_Platform_DateTime, Off_Platform_DateTime
FROM Music_Platform.Music_Data
И первые 4 строки таблицы, которые приведут к:
Используя два столбца дат, я хочу суммировать «Song_Length_Seconds» за каждый месяц и день, для которых будут доступны все песни (между двумя датами в столбцах МЕТОК времени).
Например (используя снимок экрана), просто взглянув на первые 4 строки и только на месяц 2020-06, это будет включать только первые 3 строки общей продолжительностью 739,8 секунды.
Сначала я начал с создания временной таблицы за месяц, но я не уверен, как действовать дальше или это даже лучший метод:
with
months as (
select format_date('%Y-%m', month_start) month_key
from unnest(
generate_date_array('2020-01-01', '2022-12-01', interval 1 month)
) month_start
)
Комментарии:
1. Я не понимаю. Первая строка доступна в течение 26 дней в июне, поэтому я ожидал бы, что значение будет
26 * 242.2
или что-то в этом роде.
Ответ №1:
WITH table AS (
SELECT 242.4 Song_Length_Seconds, TIMESTAMP '2020-06-05 11:00:00 UTC' On_Platform_DateTime
union all
SELECT 240.6 Song_Length_Seconds, TIMESTAMP '2020-06-17 05:00:00 UTC' On_Platform_DateTime
UNION ALL
SELECT 256.8 Song_Length_Seconds, TIMESTAMP '2020-06-24 05:00:00 UTC' On_Platform_DateTime
UNION ALL
SELECT 380.4 Song_Length_Seconds, TIMESTAMP '2020-07-21 05:00:00 UTC' On_Platform_DateTime
)
SELECT
EXTRACT(YEAR FROM On_Platform_DateTime) year
, EXTRACT(MONTH FROM On_Platform_DateTime) month
, SUM(Song_Length_Seconds) Sum_Song_Length_Seconds
FROM
table
GROUP BY
year
, month