は、BigQueryの標準SQL
のためでありますあなたがテスト/あなたの質問からダミーデータを使用して、上記で遊ぶことができます
#standardSQL
SELECT
countryID,
MIN(yearBATTLE) start,
MAX(yearBATTLE) finish,
ARRAY_AGG(STRUCT(battleID, yearBATTLE)) battels
FROM (
SELECT
battleID, countryID, yearBATTLE,
SUM(delta) OVER(PARTITION BY countryID ORDER BY yearBATTLE) AS grp
FROM (
SELECT
battleID, countryID, yearBATTLE,
IF(yearBATTLE - IFNULL(LAG(yearBATTLE) OVER(PARTITION BY countryID ORDER BY yearBATTLE), yearBATTLE) <= 10, 0, 1) AS delta
FROM `yourproject.yourdataset.battle`
)
)
GROUP BY countryID, grp
ORDER BY countryID, grp
(私は例のために5年に10年に変更)
#standardSQL
WITH `yourproject.yourdataset.battle` AS (
SELECT 'Battle1' battleID, 'Country1' countryID, 1567 yearBATTLE UNION ALL
SELECT 'Battle2', 'Country2', 1568 UNION ALL
SELECT 'Battle3', 'Country2', 1570 UNION ALL
SELECT 'Battle4', 'Country3', 1599 UNION ALL
SELECT 'Battle5', 'Country2', 1575 UNION ALL
SELECT 'Battle6', 'Country2', 1620
)
SELECT
countryID,
MIN(yearBATTLE) start,
MAX(yearBATTLE) finish,
ARRAY_AGG(STRUCT(battleID, yearBATTLE)) battels
FROM (
SELECT
battleID, countryID, yearBATTLE,
SUM(delta) OVER(PARTITION BY countryID ORDER BY yearBATTLE) AS grp
FROM (
SELECT
battleID, countryID, yearBATTLE,
IF(yearBATTLE - IFNULL(LAG(yearBATTLE) OVER(PARTITION BY countryID ORDER BY yearBATTLE), yearBATTLE) <= 5, 0, 1) AS delta
FROM `yourproject.yourdataset.battle`
)
)
GROUP BY countryID, grp
ORDER BY countryID, grp
結果は次のとおりです
countryID start finish battels.battleID battels.yearBATTLE
Country1 1567 1567 Battle1 1567
Country2 1568 1575 Battle2 1568
Battle3 1570
Battle5 1575
Country2 1620 1620 Battle6 1620
Country3 1599 1599 Battle4 1599
あなたの質問は不明です。表形式のデータと結果が役立ちます。そして、「戦争量」は何ですか? –