我有一个存储事件的数据库。每个活动都有不同的活动。数据库是这样制作的(我知道这不是最好的数据库设计,但我正在处理给我的内容):
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
因为某些事件在不同日期具有相同的名称。我需要的是只有在日期不同时才有一个独特的事件名称。
我迷失了想法。
感谢。
答案 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)