Tenho uma tabela no MySQL...
# id, admin_id, appointment_id, timestamp
'1', '10', '1', '2025-03-01 08:00:00'
'2', '10', '1', '2025-03-01 09:00:00'
'3', '10', '2', '2025-04-01 08:00:00'
'4', '10', '2', '2025-04-01 09:00:00'
'5', '20', '1', '2025-05-01 08:00:00'
'6', '20', '1', '2025-05-01 09:00:00'
'7', '20', '2', '2025-06-01 08:00:00'
'8', '20', '2', '2025-06-01 09:00:00'
O que eu quero fazer é somar as diferenças de tempo mínimo/máximo para os compromissos dos administradores.
Posso agrupar facilmente por administradores e compromissos
SELECT *,
min(timestamp),
max(timestamp),
max(unix_timestamp(timestamp))-min(unix_timestamp(timestamp)) as photo_time,
count(id) as photo_count
FROM scratch.photo_time
GROUP BY admin_id,appointment_id
O que resulta em
# id, admin_id, appointment_id, timestamp, min(timestamp), max(timestamp), photo_time, photo_count
'1', '10', '1', '2025-03-01 08:00:00', '2025-03-01 08:00:00', '2025-03-01 09:00:00', '3600', '2'
'3', '10', '2', '2025-04-01 08:00:00', '2025-04-01 08:00:00', '2025-04-01 09:00:00', '3600', '2'
'5', '20', '1', '2025-05-01 08:00:00', '2025-05-01 08:00:00', '2025-05-01 09:00:00', '3600', '2'
'7', '20', '2', '2025-06-01 08:00:00', '2025-06-01 08:00:00', '2025-06-01 09:00:00', '3600', '2'
O que eu quero é uma tabela agrupada apenas por administradores, com as diferenças de horário somadas para cada compromisso.
O mais perto que cheguei disso foi isso...
SELECT *,
min(timestamp),
max(timestamp),
sum((max(unix_timestamp(timestamp)) over (partition by appointment_id))-min(unix_timestamp(timestamp)) over (partition by appointment_id)) as photo_time,
count(id) as photo_count
FROM scratch.photo_time
GROUP BY admin_id
Mas isso dá um erro.
A tabela correta tem apenas 2 linhas com contagem de fotos de 4 e tempo de foto de 7200 para cada linha.
Qual é a sintaxe correta do MySQL para esta consulta?