MySQL: `GROUP BY`, исключая определенные равные столбцы
По сути, у меня есть данные временных рядов, и мы хотим агрегировать по времени записи. Иногда данные извлекаются несколько раз в течение одной секунды, поэтому при агрегировании значения удваиваются или утраиваются. Есть ли способ, которым я могу group by
время записи без группировки строк с одинаковыми значениями для данного набора столбцов?
т.е.
09:05:00 FRONT 100
09:05:00 FRONT 100
09:05:00 BACK 25
09:05:00 BACK 25
Я хотел бы просто получить:
09:05:00 125
09:05:00 125
1 ответ
Взять № 2
Я добавил пару дополнительных строк, чтобы сделать логику более понятной - это должно создать 3 одинаковых строки:
time, label, value
'09:05:00', 'FRONT', '100'
'09:05:00', 'FRONT', '100'
'09:05:00', 'BACK', '25'
'09:05:00', 'BACK', '25'
'09:05:00', 'FRONT', '100'
'09:05:00', 'BACK', '25'
Вот SQL, который, кажется, работает (представление создано, потому что моя установка mysql не позволяет мне использовать 'with' - вообще ничего из этого не показывает mysql в лучшем виде - row_number(), кто-нибудь?):
create view myview as
select s1.time, s1.value from
(select time,sum(value) as value from mytable group by time) s1
join (select * from mytable) s2
on s1.time = s2.time
join (select time, min(label) as minLabel from mytable group by time) s3
on s2.label = s3.minLabel;
select m1.time, cast(value/numRows as signed) as value from myview m1
join (select time, count(*) as numRows from myview) m2
on m1.time=m2.time
Результаты:
time, value
'09:05:00', '125'
'09:05:00', '125'
'09:05:00', '125'