【问题标题】:Select N entries for each month value为每个月值选择 N 个条目
【发布时间】:2017-07-01 18:49:50
【问题描述】:

我有以下 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

我想为每个月选择任意 2 个条目,因此月份 345 将有 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

【问题讨论】:

  • 发布预期结果

标签: mysql sql


【解决方案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;

这会从每个月返回任意两行。您可以添加第二个连接键来获取两个特定值——前两个、后两个、最高速度或其他任何值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-04-08
    • 1970-01-01
    • 2021-01-23
    • 1970-01-01
    • 1970-01-01
    • 2016-11-25
    • 1970-01-01
    相关资源
    最近更新 更多