这个问题在这里已经有答案了:
sql仅选择列上具有最大值的行[重复](27个答案)
两年前关门了。
我的table是:
id env date name PI #
---|-----|------------|--------|-----
1 | 10 | 04/03/2009 | john | 399
2 | 11 | 04/03/2009 | juliet| 244
5 | 12 | 04/03/2009 | borat | 345
3 | 10 | 03/03/2009 | john | 399
4 | 11 | 03/03/2009 | juliet | 244
6 | 12 | 03/03/2009 | borat | 500
7 | 13 | 24/12/2008 | borat | 650
8 | 13 | 01/01/2009 | borat | 650
这篇文章对下面的问题稍加修改。
如何选择最大值(列值)的行,与sql中的另一列不同?
不同的是,我想选择每个不同的环境和pi#持有日期的最大值。例如,当两行的env和pi相同时(第3行和第1行、第2行和第4行、第7行和第8行),我想返回包含最大日期的行。
下面是期望的结果。
id env date name PI #
---|----|------------|--------|----
1 | 10 | 04/03/2009 | john | 399
2 | 11 | 04/03/2009 | juliet | 244
5 | 12 | 04/03/2009 | borat | 345
6 | 12 | 03/03/2009 | borat | 500
8 | 13 | 01/01/2009 | borat | 650
3条答案
按热度按时间7hiiyaii1#
典型方法使用相关子查询:
或许更好的方法是:
这稍微好一点,因为(1)
id
可能是主键,因此匹配速度更快;和(2)如果同一日期有多行,则只返回一行。bogh5gae2#
您可以使用以下方法获得所需的结果:
rextester演示
gorkyyrv3#
我想这就是你想要的: