【mysql】n番目に、大きい小さい日付のデータを取り出す

未分類

なんか久々にmysqlネタです。・・・しばらくmysqlを組んでなかったってことですね(汗)

さて、mysqlにはMAX()やMIN()関数があり、最大、最小は簡単に取り出せるのですが、n番目となるとちょっと工夫がいる。

サンプル

こんな商品番号、日付、スコアデータがあると想定

商品番号 id 日付 tdate スコア score
1 2019-12-19 10
2 2019-12-19 8
1 2019-12-18 15
2 2019-12-18 3
1 2019-12-17 9
2 2019-12-17 6

ここから、例えば2番目の2019-12-18や3番目の2019-12-17という特定の日付のみのデータをスコア順に拾いたいとする。

考え方の基本形

SELECT *
FROM scoreTable
WHERE tdate = (ここをどうするか!)
ORDER BY score DESC
LIMIT 30

特定の日付を拾いたいのでこの形で考えていきます

まずはMAX()を使った1番大きい日付のデータのみを取り出す

SELECT *
FROM scoreTable
WHERE tdate = (SELECT MAX(tdate) FROM scoreTable)
ORDER BY score DESC
LIMIT 30

まぁここまではだいたい思いつく

2番目に大きい日付のデータのみを取り出す

SELECT * 
FROM scoreTable 
WHERE tdate = (SELECT tdate FROM scoreTable GROUP BY tdate ORDER BY tdate DESC LIMIT 1,1) 
ORDER BY score DESC
LIMIT 30

はい。ここまで理解できればn番目は簡単です。

n番目に大きい日付

SELECT * 
FROM scoreTable 
WHERE tdate = (SELECT tdate FROM scoreTable GROUP BY tdate ORDER BY tdate DESC LIMIT [n番目-1],1)
ORDER BY score DESC
LIMIT 30

[n番目-1] の部分を取り出したいn番目を入れてね。10番目だったら1を引いて9だよ!

 

コメント

タイトルとURLをコピーしました