SELECT distinct on (name) name, changeTime, id, editType, comment, userIP from ( SELECT * from (
SELECT groupedChanges.name as name, groupedChanges.changeTime as changeTime, pageChanges.id as id, pageChanges.editType as editType, pageChanges.comment as comment, pageChanges.userIP as userIP from
(
SELECT pageChanges.name as name, max(pageChanges.changeTime) as changeTime from pageChanges, userFavorites as f, users as u where u.name=f.username and f.page=pageChanges.name and u.id=%(userFavoritesFor)s group by pageChanges.name
) as groupedChanges, pageChanges where groupedChanges.name=pageChanges.name and groupedChanges.changeTime=pageChanges.changeTime
UNION
SELECT groupedChanges.name as name, groupedChanges.changeTime as changeTime, currentImageChanges.id as id, currentImageChanges.editType as editType, currentImageChanges.comment as comment, currentImageChanges.userIP as userIP from
(
SELECT currentImageChanges.name as name, max(currentImageChanges.changeTime) as changeTime from currentImageChanges, userFavorites as f, users as u where u.name=f.username and f.page=currentImageChanges.name and u.id=%(userFavoritesFor)s group by currentImageChanges.name
) as groupedChanges, currentImageChanges where groupedChanges.name=currentImageChanges.name and groupedChanges.changeTime=currentImageChanges.changeTime
UNION
SELECT groupedChanges.name as name, groupedChanges.changeTime as changeTime, oldImageChanges.id as id, oldImageChanges.editType as editType, oldImageChanges.comment as comment, oldImageChanges.userIP as userIP from
(
SELECT oldImageChanges.name as name, max(oldImageChanges.changeTime) as changeTime from oldImageChanges, userFavorites as f, users as u where u.name=f.username and f.page=oldImageChanges.name and u.id=%(userFavoritesFor)s group by oldImageChanges.name
) as groupedChanges, oldImageChanges where groupedChanges.name=oldImageChanges.name and groupedChanges.changeTime=oldImageChanges.changeTime
UNION
SELECT groupedChanges.name as name, groupedChanges.changeTime as changeTime, deletedImageChanges.id as id, deletedImageChanges.editType as editType, deletedImageChanges.comment as comment, deletedImageChanges.userIP as userIP from
(
SELECT deletedImageChanges.name as name, max(deletedImageChanges.changeTime) as changeTime from deletedImageChanges, userFavorites as f, users as u where u.name=f.username and f.page=deletedImageChanges.name and u.id=%(userFavoritesFor)s group by deletedImageChanges.name
) as groupedChanges, deletedImageChanges where groupedChanges.name=deletedImageChanges.name and groupedChanges.changeTime=deletedImageChanges.changeTime
UNION
SELECT groupedChanges.name as name, groupedChanges.changeTime as changeTime, eventChanges.id as id, eventChanges.editType as editType, eventChanges.comment as comment, eventChanges.userIP as userIP from
(
SELECT eventChanges.name as name, max(eventChanges.changeTime) as changeTime from eventChanges, userFavorites as f, users as u where u.name=f.username and f.page=eventChanges.name and u.id=%(userFavoritesFor)s group by eventChanges.name
) as groupedChanges, eventChanges where groupedChanges.name=eventChanges.name and groupedChanges.changeTime=eventChanges.changeTime
UNION
SELECT groupedChanges.name as name, groupedChanges.changeTime as changeTime, currentMapChanges.id as id, currentMapChanges.editType as editType, currentMapChanges.comment as comment, currentMapChanges.userIP as userIP from
(
SELECT currentMapChanges.name as name, max(currentMapChanges.changeTime) as changeTime from currentMapChanges, userFavorites as f, users as u where u.name=f.username and f.page=currentMapChanges.name and u.id=%(userFavoritesFor)s group by currentMapChanges.name
) as groupedChanges, currentMapChanges where groupedChanges.name=currentMapChanges.name and groupedChanges.changeTime=currentMapChanges.changeTime
UNION
SELECT groupedChanges.name as name, groupedChanges.changeTime as changeTime, oldMapChanges.id as id, oldMapChanges.editType as editType, oldMapChanges.comment as comment, oldMapChanges.userIP as userIP from
(
SELECT oldMapChanges.name as name, max(oldMapChanges.changeTime) as changeTime from oldMapChanges, userFavorites as f, users as u where u.name=f.username and f.page=oldMapChanges.name and u.id=%(userFavoritesFor)s group by oldMapChanges.name
) as groupedChanges, oldMapChanges where groupedChanges.name=oldMapChanges.name and groupedChanges.changeTime=oldMapChanges.changeTime
UNION
SELECT groupedChanges.name as name, groupedChanges.changeTime as changeTime, deletedMapChanges.id as id, deletedMapChanges.editType as editType, deletedMapChanges.comment as comment, deletedMapChanges.userIP as userIP from
(
SELECT deletedMapChanges.name as name, max(deletedMapChanges.changeTime) as changeTime from deletedMapChanges, userFavorites as f, users as u where u.name=f.username and f.page=deletedMapChanges.name and u.id=%(userFavoritesFor)s group by deletedMapChanges.name
) as groupedChanges, deletedMapChanges where groupedChanges.name=deletedMapChanges.name and groupedChanges.changeTime=deletedMapChanges.changeTime
) as sortedChanges order by changeTime ) as result;