过滤每个条目的MAX值行

时间:2018-03-18 10:56:08

标签: sql

如果我想获得每个"数字"的MAX(changeNo)行,请entry(当note是另一个表的JOIN列时),如query:

SELECT T0.id, T0.number, T0.date, T0.changeNo, T1.note 
FROM 
    table T0 INNER JOIN table2 T1 ON T0.joinID = T1.joinID 
WHERE
    changeNo = (SELECT max(changeNo) FROM table) 

但是这需要来自"全局最大值"的最大值,而不是来自每个相同"数字"的最大值。条目。

input data:
id|number|date|changeNo|note
01|150052|1603|00000001|0x22
02|150052|1603|00000002|0x45
03|150052|1603|00000003|0x64
04|150053|1603|00000001|0x89
05|150053|1603|00000002|0x56
06|150054|1603|00000001|0x77
07|150054|1603|00000002|0x84
08|150055|1603|00000001|0x46


expected output:
id|number|date|changeNo|note
03|150052|1603|00000003|0x64
05|150053|1603|00000002|0x56
07|150054|1603|00000002|0x84
08|150055|1603|00000001|0x46]

1 个答案:

答案 0 :(得分:0)

您需要相关子查询:

SELECT T0.id, T0.number, T0.date, T0.changeNo, T1.note 
FROM table T0 INNER JOIN
     table2 T1
     ON T0.joinID = T1.joinID 
WHERE t0.changeNo = (SELECT max(t0.changeNo) FROM table tt0 WHERE tt0.joinID = t0.joinID) ;

这将返回每个joinID的最大值。注意:还有其他方法可以实现此类查询。通常,相关子查询是使用正确索引的最快方法,尤其是table(joinID, changeNo)上的一个。