选择列出SQL所有活动的最新事件

时间:2012-02-24 16:12:12

标签: mysql sql

我有一个存储事件的数据库。每个活动都有不同的活动。数据库是这样制作的(我知道这不是最好的数据库设计,但我正在处理给我的内容):

eventID | date       | eventname | activity
___________________________________________
0001    | 01/01/2012 | name1     | activty1
0002    | 01/01/2012 | name1     | activty2
0003    | 01/05/2012 | event2    | activty1
0004    | 01/05/2012 | event2    | activty2
0005    | 01/07/2012 | name1     | activty1

同一事件可以有多个活动。我可以从事件(活动)获取所有记录的唯一方法是使用eventname列。

我要做的是获取所有活动的最后20个事件。因此,我不能简单地选择20行(使用LIMIT,因为这样每次都不会得到20个事件,因为有些事件有2个活动而其他事件有10个。)

我无法使用SELECT DISTINCT eventname因为某些事件在不同日期具有相同的名称。我需要的是只有在日期不同时才有一个独特的事件名称。

我迷失了想法。

感谢。

2 个答案:

答案 0 :(得分:2)

SELECT
  *
FROM
  event
INNER JOIN
(
  SELECT   eventName, Date
  FROM     events
  GROUP BY eventName, Date
  ORDER BY Date DESC
  LIMIT    20
)
  AS last_20_events
    ON  last_20_events.eventName = events.eventName
    AND last_20_events.Date      = events.Date

答案 1 :(得分:0)

SELECT eventName, date, 
 GROUP_CONCAT(activity ORDER BY activity SEPARATOR ', ') 
FROM events
GROUP BY eventName, date
ORDER BY date desc
LIMIT 20

目前我无法访问MySQL数据库,所以我无法对此进行测试。此答案基于SO上的其他已接受答案(搜索group_concat)