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'
Другие вопросы по тегам