drh/api/time_range_stacked_metrics/index.sql

          -- not including shell
          -- not including breadcrumbs from sqlpage_aide_navigation
          -- not including page title from sqlpage_aide_navigation

          SELECT 'json' AS component, 
JSON_OBJECT(
    'timeMetrics', (
        SELECT 
            JSON_OBJECT(
                'participant_id', participant_id, 
                'timeBelowRangeLow', CAST(COALESCE(SUM(CASE WHEN CGM_Value BETWEEN 54 AND 69 THEN 1 ELSE 0 END) * 100.0 / COUNT(*), 0) AS INTEGER),                        
                'timeBelowRangeVeryLow', CAST(COALESCE(SUM(CASE WHEN CGM_Value < 54 THEN 1 ELSE 0 END) * 100.0 / COUNT(*), 0) AS INTEGER),                        
                'timeInRange', CAST(COALESCE(SUM(CASE WHEN CGM_Value BETWEEN 70 AND 180 THEN 1 ELSE 0 END) * 100.0 / COUNT(*), 0) AS INTEGER),                        
                'timeAboveRangeVeryHigh', CAST(COALESCE(SUM(CASE WHEN CGM_Value > 250 THEN 1 ELSE 0 END) * 100.0 / COUNT(*), 0) AS INTEGER),                        
                'timeAboveRangeHigh', CAST(COALESCE(SUM(CASE WHEN CGM_Value BETWEEN 181 AND 250 THEN 1 ELSE 0 END) * 100.0 / COUNT(*), 0) AS INTEGER) 
            )
        FROM 
            combined_cgm_tracing
        WHERE 
            participant_id = $participant_id    
        AND Date_Time BETWEEN $start_date AND $end_date
    )
) AS contents;