我有以下SQL表:
Id DateTime Speed
1 2017-03-02 19:06:20 50
1 2017-03-02 19:10:18 52
1 2017-04-01 20:01:10 55
2 2017-03-02 18:06:20 60
2 2017-05-03 19:08:00 61
3 2017-04-12 19:01:40 80
3 2017-05-11 19:05:50 82
3 2017-05-14 11:00:00 81
我想为每个月选择任意两个条目,因此3
,4
和5
个月会有2个观察结果。
任何人都可以帮忙解决这个问题吗?
预期结果:
Id DateTime Speed
1 2017-03-02 19:06:20 50
1 2017-03-02 19:10:18 52
1 2017-04-01 20:01:10 55
3 2017-04-12 19:01:40 80
2 2017-05-03 19:08:00 61
3 2017-05-11 19:05:50 82
答案 0 :(得分:1)
我认为MySQL中最有效的通用方法是使用变量:
select t.*
from (select t.*,
(@rn := if(@ym = date_format(date, '%Y-%m'), @rn + 1,
if(@ym := date_format(date, '%Y-%m'), 1, 1)
)
) as rn
from t cross join
(select @ym := '', @rn := 0) params
order by date_format(date, '%Y-%m')
) t
where rn <= 2;
这将从每个月返回任意两行。您可以添加第二个连接键以获取两个特定值 - 前两个,后两个,最高速度或其他任何值。