这是我的表,我应该获取每个status_id.
的MAX (id)
id status_id
10 1
11 1
12 2
13 2
14 2
15 4
16 4
所以,我使用这个sql查询,它工作真,并获取我所有最大ID。
select status_id, max(id) as max FROM `table`
where status_id in (1,2,3,4) group by status_id
这个 sql 命令使用 while 为我获取 3 个 MAX ID。
11, 14, 16....
你看,没有任何合适的 id 到 3rd status_id
. 如果第 3 个 status_id
没有任何合适的 id,只需将其标记为零。所以我希望sql会带来这些结果:
11, 14, 0, 16
您可以创建一个子查询,该子查询基本上具有您需要的所有ID
,并对其进行左连接。
SELECT a.status_ID,
IFNULL(MAX(b.id), 0) maxVal
FROM
(
SELECT 1 status_ID UNION ALL
SELECT 2 UNION ALL
SELECT 3 UNION ALL
SELECT 4
) a
LEFT JOIN `table` b ON a.status_id = b.status_id
GROUP BY a.status_id
- SQLFiddle 演示
您可以使用包含所有 id 和 stats_id值 0 的临时虚拟表连接:
SELECT dummy.status_id, COALESCE(MAX(id), 0) AS max
FROM (
SELECT 1 status_id
UNION SELECT 2 status_id
UNION SELECT 3 status_id
UNION SELECT 4 status_id
) dummy
LEFT JOIN `table`
ON dummy.status_id = table.status_id
GROUP BY dummy.status_id
但这不会扩展,并且是维护的噩梦(您必须更改虚拟选择,以防出现新的status_id)。如果您有一个包含所有status_ids的表,请将虚拟选择替换为该表。