select
	message,
	coalesce(sum(case when ts=date_format(date_sub(now(), interval 35 day), '%Y%m%d') then num end), 0) as `-35`,
	coalesce(sum(case when ts=date_format(date_sub(now(), interval 34 day), '%Y%m%d') then num end), 0) as `-34`,
	coalesce(sum(case when ts=date_format(date_sub(now(), interval 33 day), '%Y%m%d') then num end), 0) as `-33`,
	coalesce(sum(case when ts=date_format(date_sub(now(), interval 32 day), '%Y%m%d') then num end), 0) as `-32`,
	coalesce(sum(case when ts=date_format(date_sub(now(), interval 31 day), '%Y%m%d') then num end), 0) as `-31`,
	coalesce(sum(case when ts=date_format(date_sub(now(), interval 30 day), '%Y%m%d') then num end), 0) as `-30`,
	coalesce(sum(case when ts=date_format(date_sub(now(), interval 29 day), '%Y%m%d') then num end), 0) as `-29`,
	coalesce(sum(case when ts=date_format(date_sub(now(), interval 28 day), '%Y%m%d') then num end), 0) as `-28`,
	coalesce(sum(case when ts=date_format(date_sub(now(), interval 27 day), '%Y%m%d') then num end), 0) as `-27`,
	coalesce(sum(case when ts=date_format(date_sub(now(), interval 26 day), '%Y%m%d') then num end), 0) as `-26`,
	coalesce(sum(case when ts=date_format(date_sub(now(), interval 25 day), '%Y%m%d') then num end), 0) as `-25`,
	coalesce(sum(case when ts=date_format(date_sub(now(), interval 24 day), '%Y%m%d') then num end), 0) as `-24`,
	coalesce(sum(case when ts=date_format(date_sub(now(), interval 23 day), '%Y%m%d') then num end), 0) as `-23`,
	coalesce(sum(case when ts=date_format(date_sub(now(), interval 22 day), '%Y%m%d') then num end), 0) as `-22`,
	coalesce(sum(case when ts=date_format(date_sub(now(), interval 21 day), '%Y%m%d') then num end), 0) as `-21`,
	coalesce(sum(case when ts=date_format(date_sub(now(), interval 20 day), '%Y%m%d') then num end), 0) as `-20`,
	coalesce(sum(case when ts=date_format(date_sub(now(), interval 19 day), '%Y%m%d') then num end), 0) as `-19`,
	coalesce(sum(case when ts=date_format(date_sub(now(), interval 18 day), '%Y%m%d') then num end), 0) as `-18`,
	coalesce(sum(case when ts=date_format(date_sub(now(), interval 17 day), '%Y%m%d') then num end), 0) as `-17`,
	coalesce(sum(case when ts=date_format(date_sub(now(), interval 16 day), '%Y%m%d') then num end), 0) as `-16`,
	coalesce(sum(case when ts=date_format(date_sub(now(), interval 15 day), '%Y%m%d') then num end), 0) as `-15`,
	coalesce(sum(case when ts=date_format(date_sub(now(), interval 14 day), '%Y%m%d') then num end), 0) as `-14`,
	coalesce(sum(case when ts=date_format(date_sub(now(), interval 13 day), '%Y%m%d') then num end), 0) as `-13`,
	coalesce(sum(case when ts=date_format(date_sub(now(), interval 12 day), '%Y%m%d') then num end), 0) as `-12`,
	coalesce(sum(case when ts=date_format(date_sub(now(), interval 11 day), '%Y%m%d') then num end), 0) as `-11`,
	coalesce(sum(case when ts=date_format(date_sub(now(), interval 10 day), '%Y%m%d') then num end), 0) as `-10`,
	coalesce(sum(case when ts=date_format(date_sub(now(), interval  9 day), '%Y%m%d') then num end), 0) as  `-9`,
	coalesce(sum(case when ts=date_format(date_sub(now(), interval  8 day), '%Y%m%d') then num end), 0) as  `-8`,
	coalesce(sum(case when ts=date_format(date_sub(now(), interval  7 day), '%Y%m%d') then num end), 0) as  `-7`,
	coalesce(sum(case when ts=date_format(date_sub(now(), interval  6 day), '%Y%m%d') then num end), 0) as  `-6`,
	coalesce(sum(case when ts=date_format(date_sub(now(), interval  5 day), '%Y%m%d') then num end), 0) as  `-5`,
	coalesce(sum(case when ts=date_format(date_sub(now(), interval  4 day), '%Y%m%d') then num end), 0) as  `-4`,
	coalesce(sum(case when ts=date_format(date_sub(now(), interval  3 day), '%Y%m%d') then num end), 0) as  `-3`,
	coalesce(sum(case when ts=date_format(date_sub(now(), interval  2 day), '%Y%m%d') then num end), 0) as  `-2`,
	coalesce(sum(case when ts=date_format(date_sub(now(), interval  1 day), '%Y%m%d') then num end), 0) as  `-1`,
	coalesce(sum(case when ts=date_format(         now()                  , '%Y%m%d') then num end), 0) as   `0`
from (
	select
		trim(trailing '\r\n' from event_message) as message,
		ts,
		num
	from (
		select event_message, left(timestamp,8) as ts, count(*) as num
		from UploadWizardExceptionFlowEvent_11772722
		where timestamp > date_format(date_sub(now(), interval 35 day), '%Y%m%d')
		and event_url like 'https://commons.wikimedia.org%'
		and event_message in ( select * from (
			select event_message
			from UploadWizardExceptionFlowEvent_11772722
			where timestamp > date_format(date_sub(now(), interval 35 day), '%Y%m%d')
			and event_url like 'https://commons.wikimedia.org%'
			and (
				-- Errors known to come from browser extensions etc.
				event_message not like '%resolve%'
				and event_message not like '%toLowerCase%'
				and event_message not like '%extension is null%'
				and event_message not like '%__gCrWeb.autofill.extractForms%'
			)
			group by event_message
			order by count(*) desc limit 23
		) temp )
		group by event_message, left(timestamp,8)
		union
		select null, left(timestamp,8) as ts, count(*) as num
		from UploadWizardExceptionFlowEvent_11772722
		where timestamp > date_format(date_sub(now(), interval 35 day), '%Y%m%d')
		and event_url like 'https://commons.wikimedia.org%'
		and event_message in ( select * from (
			select event_message
			from UploadWizardExceptionFlowEvent_11772722
			where timestamp > date_format(date_sub(now(), interval 35 day), '%Y%m%d')
			and event_url like 'https://commons.wikimedia.org%'
			and (
				-- Errors known to come from browser extensions etc.
				event_message not like '%resolve%'
				and event_message not like '%toLowerCase%'
				and event_message not like '%extension is null%'
				and event_message not like '%__gCrWeb.autofill.extractForms%'
			)
			group by event_message
			order by count(*) desc limit 999999 offset 23
		) temp )
		group by left(timestamp,8)
	) u
	order by ts, num, message
) v
group by message;
