What are you trying to achieve here? I am not a MySQL programmer; however, as I understand SQL in general, every column that is not listed in the GROUP BY clause must be part of an aggregate like
SELECT
MAX(id) AS max_id,
chain, subchain, job_type
FROM
`job_logs`
WHERE
user_id = ? AND
workflow_state = ?
GROUP BY
chain, subchain, job_type
SELECT *
in a grouping query will not work in most (if not all) SQL implementations.
UPDATE
In order to get the row with the highest id for each group you would have to embed the query above in an "outer" query.
SELECT *
FROM `job_logs`
WHERE id IN (
SELECT
MAX(id) AS max_id
FROM
`job_logs`
WHERE
user_id = ? AND
workflow_state = ?
GROUP BY
chain, subchain, job_type
)
This query is deterministic and should work with most SQL dialects.
Some query engines perform better with joins than with "IN subquery". You can give this a try
SELECT A.*
FROM
`job_logs` A
INNER JOIN (
SELECT
MAX(id) AS max_id
FROM
`job_logs`
WHERE
user_id = ? AND
workflow_state = ?
GROUP BY
chain, subchain, job_type) B
ON A.id = B.max_id;
greatest-n-per-group
query. Search the SO site for this tag and you'll find plenty of similar queries and answers.ORDER BY id DESC
... thegroup by
will destroy the ordering anyway.