【问题标题】:How to get last data group by each id如何按每个 id 获取最后一个数据组
【发布时间】:2018-09-04 08:41:07
【问题描述】:

如何从每个 user_id 获取最后日期数据:

用户

id |  name   |
1  |  name 1 |
2  |  name 2 |
3  |  name 3 |

日期

id |  date       |  user_id  |
1  |  2018-08-13 |    1      |
2  |  2018-08-13 |    2      |
3  |  2018-08-15 |    1      |
4  |  2018-08-14 |    2      |

我怎样才能这样输出:

user_id |  date       |  name
    1   |  2018-08-15 |  name 1
    2   |  2018-08-14 |  name 2
    3   |  null       |  name 3

更新

我希望我的输出通过用户表选择日期表连接 -> 并从每个 user_id 获取最后日期如果我的 user_id 没有日期值,它将输出 0null

【问题讨论】:

  • 请提供更多关于你想要得到什么样的输出的信息......你想要得到每个用户的最大日期吗?
  • @MarcinMagdziarz 我更新了抱歉

标签: php mysql sql laravel


【解决方案1】:

由于您要标记 Laravel,我建议您使用查询构建器,例如:

DB::table('dates')
    ->join('users', 'dates.user_id', '=', 'users.id')
    ->select(db::raw('users.name, user_id, max(date)'))
    ->groupBy('user_id','name')
    ->get();

输出:

Illuminate\Support\Collection {#2957
     all: [
       {#2944
         +"name": "name 1",
         +"user_id": 1,
         +"max": "2018-08-15",
       },
       {#2941
         +"name": "name 2",
         +"user_id": 2,
         +"max": "2018-08-14",
       },
     ],
   }

【讨论】:

  • 对不起,其实我用的是laravel,我可以把sql转成laravel语法谢谢你的回答
【解决方案2】:

为了获得用户的最大日期,您可以使用这个 -

SELECT
  u.id,
  u.name,
  MAX(d.date) date
FROM user u
  LEFT JOIN date d
    ON u.id = d.user_id
GROUP BY u.id

1   name 1  15-Aug-18
2   name 2  14-Aug-18
3   name 3  (null)

【讨论】:

    【解决方案3】:

    SELECT u.id,MAX(d.date),u.name FROM DATE d JOIN user u ON d.user_id = u.id GROUP BY d.user_id

    【讨论】:

      【解决方案4】:

      你可以使用MAX

      SELECT u.UserID, MAX(d.date) date, u.name
      FROM User u
      left join Date d on u.id = d.id 
      

      【讨论】:

      • 我更新了我的问题
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-10-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多