2017-08-11 2 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 
を使用しています

私は次のクエリを試してみましたが、私は降順ですべてのデータを取得していますし、私は一番上のデータ

01を選択することができません、次の出力

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 ; 

を使用してみましたが、文のコンパイル中にそれが

エラーなどのエラーがスローされます:FAILED: '付近にはParseExceptionライン5時37分余分な入力歌 "期待を) '

+0

2番目のクエリにサブクエリグループの年(日付)後カンマがありません。 (結果だけでなく、エラーに対処するだけです。 – 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 
関連する問題