I have a table in 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'
What I want to do is sum the min/max time differences for the appointments over the admins.
I can easily group by admins and appointments
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
Which results in
# 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'
What I want is a table that is grouped only by admins, with the time differences summed for each appointment.
The closest I have gotten is this...
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
But this gives an error.
The correct table has only 2 rows with the photo count as 4 and the photo time 7200 for each row.
What is the proper MySQL syntax for this query?