1

複数の属性でグループ化したときに上位 n レコードを見つけようとしています。この問題に関連していると思いますが、説明されている解決策を自分の状況に適応させるのに苦労しています。

簡単にするために、列を持つテーブルがあります (did は device_id の略です):

id int
did int
dateVal dateTime

行数が最も多い日ごとに上位 n 個の device_id を見つけようとしています。

たとえば (id と dateTime の時刻部分は無視)、

did dateVal
1   2017-01-01
1   2017-01-01
1   2017-01-01
2   2017-01-01
3   2017-01-01
3   2017-01-01

1   2017-01-02
1   2017-01-02
2   2017-01-02
2   2017-01-02
2   2017-01-02
3   2017-01-02

上位2つを見つけると...

1, 2017-01-01
3, 2017-01-01
2, 2017-01-02
1, 2017-01-02

私の現在の素朴なアプローチでは、すべての日付で上位 2 つしか得られません。

--Using SQLite
select date(dateVal) || did 
from data 
group by date(dateVal), did
order by count(*) desc 
limit 2

後で行を抽出できるように、連結演算子を使用しています。

私は SQLite を使用していますが、一般的な SQL の説明をいただければ幸いです。

4

2 に答える 2