下個SQL 的主要目的是獲取每個項目的最近的一個里程碑記錄
SELECT
milestone.id ,milestone.projId,milestone.validTime
FROM
(SELECT
*
FROM
proj_milestone
WHERE STATUS =0
ORDER BY validTime ASC) AS milestone
GROUP BY milestone.projId
對應結果:
要想獲取最近的里程碑,預計完成時間validTime採取升序,升序按照group by 進行分組,既可獲得每個項目的最近的一個里程碑記錄
其中: 如何保證group by 獲取的就是這個項目下所有里程碑的第一條呢
進行反向驗證:
1 獲取這個項目的所有里程碑記錄並按照validTime升序排列
SELECT
*
FROM
proj_milestone
WHERE projId = ‘000’
AND STATUS = 0
ORDER BY validTime ASC
結果:
證明group by 拿到的是分組結果的第一條數據與id大小無關
如果validTime,projId,都相同,即滿足條件的里程碑記錄有多條
分組結果會自動按照id升序獲取第一條,如下: