Unten ist für BigQuery Standard-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
Sie können testen/spielen mit über Dummy-Daten aus Ihrer Frage mit (ich habe gerade 10 Jahre bis 5 Jahre zum Wohle Beispiel)
#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
Ergebnis ist wie folgt
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
Ihre Frage ist unklar. Daten und Ergebnisse in Form einer Tabelle würden helfen. Und was ist "Quantität des Krieges"? –