2017-08-11 57 views
0

我试图找到顶部第一次听到歌曲中最受用户首由用户喜欢在一年的某月在某一个月和一年

我使用了下面的数据

user-id  date   song 
.......  .......  ...... 
1   2017-9-30  song1 
1   2017-9-10  song1 
1   2017-3-12  song2 
1   2017-9-01  song1 
1   2017-12-31  song1 
1   2017-09-12  song3 
1   2017-10-11  song1 
1   2017-09-09  song5 
1   2017-10-08  song4 
2   2017-07-12  song1 
2   2017-12-31  song3 
2   2017-10-12  song5 
3   2017-10-11  song1 
3   2017-10-09  song7 
3   2017-10-08  song2 
3   2017-07-12  song2 

我试图让下面的输出

user-id  year  month  song  count 
    ....... ......  ......  ..... ...... 
     1  2017  9   song1  3 

我曾尝试下面的查询,但我在降序排列获得的所有数据,我无法挑选最上面的数据

SELECT YEAR(date) AS year, MONTH(date) AS month,song,count(song) c 
FROM table where id=1 and year(dt)=2017 and month(dt)=9 
GROUP BY YEAR(date), MONTH(date) ,song ORDER BY c DESC 

我甚至用

SELECT d.* 
FROM (SELECT id,year(date) y,month(date) m,count(song) as c, 
      ROW_NUMBER() OVER (PARTITION BY month(date) ORDER BY COUNT(song) DESC) as seqnum 
    FROM table where id=1 and month(date)=9 
    GROUP BY month(date),year(date) song 
    ) d 
WHERE seqnum = 1 
ORDER BY c, dt DESC ; 

尝试和它引发的错误作为

错误在编译时声明:失败:ParseException的线路5:37外来输入 '歌' 期待)附近“ '

+0

第二个查询在子查询组中的年份(日期)后缺少逗号。 (只是解决错误,而不是结果。 – xQbert

回答

2

您可以使用LIMIT

SELECT YEAR(date) AS year, MONTH(date) AS month,song,count(song) c 
FROM table 
GROUP BY YEAR(date), MONTH(date) ,song 
ORDER BY c DESC 
LIMIT 1