{"query":{"id":2,"sql":"-- [params]\n-- boolean :show_completed = 1\n-- boolean :show_not_started = 1\n-- string :interval = 1 year\n\nWITH raw AS (\n    SELECT psr.key as key, CAST(psr.value as JSON) as value\n    FROM plugin_store_rows psr\n    WHERE plugin_name = 'discourse-narrative-bot'\n    AND   VALUE IS NOT NULL\n),\ndata AS(\n    SELECT  \n        u.id as user_id,\n        u.created_at as user_created_at,\n        case when t.reply_count > 0 then TRUE else FALSE end as user_interacted,\n        case when value->>'state' = 'end' then TRUE else FALSE end as completed,\n        t.id as topic_id,\n        value->>'track' as track,\n        value->>'state' as current_state,\n        p.created_at as last_post_at\n    FROM raw\n    LEFT JOIN topics t ON CAST(value->>'topic_id' as INTEGER) = t.id\n    LEFT JOIN users u ON CAST(key as INTEGER) = u.id\n    LEFT JOIN posts p ON CAST(value->>'last_post_id' as INTEGER) = p.id\n    WHERE value->>'track' IS NOT NULL\n)\n\nSELECT track, current_state, count(*) as user_count\nFROM data\nWHERE   (:show_completed or completed = FALSE)\nAND     (:show_not_started or user_interacted = TRUE)\nAND     (last_post_at >= CURRENT_DATE - INTERVAL :interval)\nGROUP BY track, current_state\nORDER BY user_count DESC","name":"Narrative Bot Summary","description":"List which steps of the narrative users stop on. Filtered by date.","param_info":[{"identifier":"show_completed","type":"boolean","default":"1","nullable":false},{"identifier":"show_not_started","type":"boolean","default":"1","nullable":false},{"identifier":"interval","type":"string","default":"1 year","nullable":false}]}}