Using this query, I can see all tickets which haven't had surveys sent:
SELECT JOB_TICKET_ID,concat(FIRST_NAME, ' ', LAST_NAME) AS 'name',CLOSE_DATE,SURVEY_RESPONSE_ID,ASSIGNED_TECH_ID FROM JOB_TICKET LEFT JOIN TECH ON TECH.CLIENT_ID = JOB_TICKET.ASSIGNED_TECH_ID WHERE PROBLEM_TYPE_ID = 87 AND STATUS_TYPE_ID = 3 AND SURVEY_RESPONSE_ID IS null AND CLOSE_DATE > '2014-04-01 00:00:00'
I added the close date where clause because I only wanted tickets after a certain period. Problem Type ID 87 is our change management ticket type.
Then I went to each ticket, and (even though they were already closed) ticked off client, and saved and emailed. This then sent out the survey email to our techs again for them to complete. Once the email is sent, it disappears from this list. Although, that doesn't tell me which haven't been completed, only which haven't been sent.
SELECT JOB_TICKET_ID,concat(FIRST_NAME, ' ', LAST_NAME) AS 'name',CLOSE_DATE,SURVEY_RESPONSE_ID,ASSIGNED_TECH_ID,SURVEY_RESPONSE.RESPONSE_DATE FROM JOB_TICKET LEFT JOIN SURVEY_RESPONSE ON SURVEY_RESPONSE.ID = JOB_TICKET.SURVEY_RESPONSE_ID LEFT JOIN TECH ON TECH.CLIENT_ID = JOB_TICKET.ASSIGNED_TECH_ID WHERE JOB_TICKET.PROBLEM_TYPE_ID = 87 AND JOB_TICKET.STATUS_TYPE_ID = 3 AND JOB_TICKET.CLOSE_DATE > '2014-05-01 00:00:00' ORDER BY RESPONSE_DATE,SURVEY_RESPONSE_ID ASC
Then tells me what has been completed. The addition of the RESPONSE_DATE shows when the survey was completed. A value of null shows that it hasn't been completed yet.
So this is what I'm doing in the mean time, but it would be great to do this from the interface.