无法找到每个月的最大值

时间:2013-07-10 16:54:08

标签: sql

我确信这很简单,但我坚持下去。我有一张这样的桌子:

Month      Period  Value
May 2013   3       e
May 2013   2       k
May 2013   1       l
April 2013 5       z
April 2013 4       w
April 2013 3       t
April 2013 2       f
April 2013 1       j

我想找到每个月最高时期的价值。对于这些数据,这将是2013年5月的e和2013年4月的z。

2 个答案:

答案 0 :(得分:3)

您没有指定您正在使用的RDBMS,但您可以使用子查询获取每个月的max(period),然后加入您的表以获取值:

select t1.month,
  t1.period,
  t1.value
from yourtable t1
inner join
(
  select max(period) period, month
  from yourtable
  group by month
) t2
  on t1.month = t2.month
  and t1.period = t2.period;

请参阅SQL Fiddle with Demo

如果您的数据库具有窗口函数,那么您可以使用row_number()来获得结果:

select month, period, value
from 
(
  select month, period, value,
    row_number() over(partition by month order by period desc) rn
  from yourtable
) d
where rn = 1;

请参阅SQL Fiddle with Demo

答案 1 :(得分:2)

适用于大多数RDBMS的通用SQL 解决方案:

SELECT month, period, value
FROM   tbl t
WHERE  NOT EXISTS (
   SELECT 1 FROM tbl t1
   WHERE  t1.month = t.month
   AND    t1.period > t.period
   );

这个特定于Postgres ,并且有点快:

SELECT DISTINCT ON (month)
       month, period, value
FROM   tbl t
ORDER  BY month, period DESC, value DESC;

我将value DESC添加到ORDER BY以打破同样伟大时期的关系。在这种情况下,您获得的值更大。

-> SQLfiddle