Ниже для BigQuery Standard SQL
#standardSQL
SELECT start, finish,
STRING_AGG(
CONCAT(sellingMaterial, ':', CAST(volume AS STRING))
ORDER BY volume DESC, sellingMaterial
) sellingMaterial
FROM (
SELECT start, finish, sellingMaterial, COUNT(1) volume
FROM `project.dataset.conditions` c
JOIN `project.dataset.table` t
ON sellingTime BETWEEN start AND finish
GROUP BY start, finish, sellingMaterial
)
GROUP BY start, finish
Вы можете протестировать, поиграть с выше, используя примеры данных из вашего вопроса, как в примере ниже
#standardSQL
WITH `project.dataset.table` AS (
SELECT 'SAMSUNG' sellingMaterial, 2 sellingTime UNION ALL
SELECT 'SAMSUNG', 4 UNION ALL
SELECT 'SAMSUNG', 3 UNION ALL
SELECT 'NOKIA', 5 UNION ALL
SELECT 'NOKIA', 13 UNION ALL
SELECT 'NOKIA', 10 UNION ALL
SELECT 'APPLE', 12 UNION ALL
SELECT 'APPLE', 7 UNION ALL
SELECT 'APPLE', 15
), `project.dataset.conditions` AS (
SELECT 0 start, 6 finish UNION ALL
SELECT 7, 12 UNION ALL
SELECT 13, 18
)
SELECT start, finish,
STRING_AGG(
CONCAT(sellingMaterial, ':', CAST(volume AS STRING))
ORDER BY volume DESC, sellingMaterial
) sellingMaterial
FROM (
SELECT start, finish, sellingMaterial, COUNT(1) volume
FROM `project.dataset.conditions` c
JOIN `project.dataset.table` t
ON sellingTime BETWEEN start AND finish
GROUP BY start, finish, sellingMaterial
)
GROUP BY start, finish
-- ORDER BY start
с результатом
Row start finish sellingMaterial
1 0 6 SAMSUNG:3,NOKIA:1
2 7 12 APPLE:2,NOKIA:1
3 13 18 APPLE:1,NOKIA:1
Я хочу, чтобы у какого времени было больше записей [sellingMaterial]
#standardSQL
WITH `project.dataset.table` AS (
SELECT 'SAMSUNG' sellingMaterial, 2 sellingTime UNION ALL
SELECT 'SAMSUNG', 4 UNION ALL
SELECT 'SAMSUNG', 3 UNION ALL
SELECT 'NOKIA', 5 UNION ALL
SELECT 'NOKIA', 13 UNION ALL
SELECT 'NOKIA', 10 UNION ALL
SELECT 'APPLE', 12 UNION ALL
SELECT 'APPLE', 7 UNION ALL
SELECT 'APPLE', 15
), `project.dataset.conditions` AS (
SELECT 0 start, 6 finish UNION ALL
SELECT 7, 12 UNION ALL
SELECT 13, 18
)
SELECT start, finish, sellingMaterial
FROM `project.dataset.conditions` c
JOIN `project.dataset.table` t
ON sellingTime BETWEEN start AND finish
GROUP BY start, finish, sellingMaterial
ORDER BY COUNT(1) DESC
LIMIT 1
с результатом
Row start finish sellingMaterial
1 0 6 SAMSUNG