我确信这很简单,但我坚持下去。我有一张这样的桌子:
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。
答案 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;
如果您的数据库具有窗口函数,那么您可以使用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;
答案 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
以打破同样伟大时期的关系。在这种情况下,您获得的值更大。