ui: Use partitioned interval_self_intersect in breakdown tracks

This replaces the usage of interval_self_intersect with interval_self_intersect_partitioned in breakdown_tracks.ts when breakdown columns are present. This prevents an explosion of self-intersecting intervals when there are multiple breakdown groups, ensuring intervals only intersect within their own group.
diff --git a/ui/src/components/tracks/breakdown_tracks.ts b/ui/src/components/tracks/breakdown_tracks.ts
index c06aec4..76054d1 100644
--- a/ui/src/components/tracks/breakdown_tracks.ts
+++ b/ui/src/components/tracks/breakdown_tracks.ts
@@ -361,9 +361,16 @@
 
       CREATE PERFETTO TABLE ${this.segmentsTableName} AS
       SELECT iss.ts, iss.group_id, iss.interval_ends_at_ts, ${denormCols}
-      FROM interval_self_intersect!((
-        SELECT id, ts, dur FROM ${this.intervalsTableName}
-      )) iss
+      FROM ${
+        this.aggColNames.length > 0
+          ? `interval_self_intersect_partitioned!(
+            (SELECT id, ts, dur, ${this.aggColNames.join(', ')} FROM ${this.intervalsTableName}),
+            (${this.aggColNames.join(', ')})
+          )`
+          : `interval_self_intersect!((
+            SELECT id, ts, dur FROM ${this.intervalsTableName}
+          ))`
+      } iss
       JOIN ${this.intervalsTableName} i USING(id);
 
       CREATE PERFETTO TABLE ${this.projectedTableName} AS