I am trying to build a SQL query that is bit more complicated to what I am used to writing.
Example data:
x
event_id event_source duration name
67538576 9071 67 [Lpr] abc
67371890 9071 62 [Lpr] Test data
67338632 9071 63 [Lpr] Test data
67331147 9071 63 [Lpr] Test data
67325698 9071 235 [Lpr] Test data
63098403 9071 2733441 [Lpr] Test data diff
63023403 8001 2241 [Cam] Some name
63013203 8001 212 [Cam] Some name
62013203 7000 60 [Lpr] Name B
62012203 7000 70 [Lpr] Name B
So far I have a working query
SELECT min(name) as name ,sum(duration) as TotalDuration
FROM table
WHERE duration > 30 AND name LIKE '[[]Lpr]%'
GROUP BY event_source
ORDER BY TotalDuration Desc
Currently it will return
Name TotalDuration
[Lpr] Test data 2733931
[Lpr] Name B 130
But I would like that query to always returns the names with biggest event_id, so good results would be “[Lpr] abc” and “[Lpr] Name B”.
Advertisement
Answer
I think so
SELECT T1.name,
T2.TotalDuration
FROM table T1 INNER JOIN
( SELECT max(event_id) as event_id,sum(duration) as TotalDuration
FROM table
WHERE duration > 30 AND name LIKE '[[]Lpr]%'
GROUP BY event_source ) T2
ON T1.event_id = T2.event_id
ORDER BY T2.TotalDuration Desc
or you can use the window function win function sum
Sorry for the mistake 🙂