使用时GROUP BY
,结果的每一行对应于原始表的多行。这些结果的计算有三种可能性:
要解决您的问题,您必须首先使用aGROUP BY
获取足够的信息以标识所需的记录:
SELECT smsCONID, -- OK: used in GROUP BY
MAX(smsTIMESTAMP) AS smsTIMESTAMP, -- OK: aggregate MAX
COUNT(*) AS smsNUMMESSAGES -- OK: aggregate COUNT
FROM sms
GROUP BY smsCONID
ORDER BY smsTIMESTAMP DESC
然后,将该结果表与原始sms
表连接起来以获取这些记录的其他列:
SELECT *
FROM (SELECT smsCONID,
MAX(smsTIMESTAMP) AS smsTIMESTAMP,
COUNT(*) AS smsNUMMESSAGES
FROM sms
GROUP BY smsCONID) AS grouped
JOIN sms
ON grouped.smsCONID = sms.smsCONID
AND grouped.smsTIMESTAMP = sms.smsTIMESTAMP
ORDER BY smsTIMESTAMP DESC