0

我有一张桌子activities,上面有人物、运动和参加这项运动的日期。例子:

person | sport      | date
--------------------------------
jane   | soccer     | 09/15/2012
sam    | basketball | 09/10/2012
jane   | tennis     | 09/12/2012
sam    | basketball | 09/08/2012
sam    | soccer     | 09/04/2012
jane   | tennis     | 09/01/2012
sam    | basketball | 08/27/2012
jane   | football   | 08/23/2012

我需要包含一个人参加一项运动的最新日期的行。结果将是:

person | sport      | date
--------------------------------
jane   | soccer     | 09/15/2012
sam    | basketball | 09/10/2012
jane   | tennis     | 09/12/2012
sam    | soccer     | 09/04/2012 
jane   | football   | 08/23/2012

您可以在此处看到,例如,Jane 在 9 月 1 日打网球的行被排除在外,因为她也在 9 月 12 日的较新日期打网球。

这个查询是什么?我更喜欢非子查询答案,但欢迎所有答案。此外,欢迎 MySQL 和 PostgreSQL 的答案。

4

2 回答 2

2

这里是:

      select person, sport, max( date) as date 
      from activities
      group by person, sport
于 2012-10-08T19:28:09.907 回答
2

您可以row_number()在 PostgreSQL 中使用(参见SQL Fiddle with Demo):

select *
from 
(
  select person, sport, date,
    row_number() 
      over(partition by person, sport order by date desc) rn
  from yourtable
) x
where rn = 1
于 2012-10-08T19:32:34.290 回答