如何按每个ID获取最后一个数据组

时间:2018-09-04 08:41:08

标签: php mysql sql laravel

如何从每个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没有日期值,它将输出{{1} }或0

4 个答案:

答案 0 :(得分:1)

您可以使用MAX

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

答案 1 :(得分:1)

要获取用户的最大日期,可以使用此--p

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)

答案 2 :(得分:1)

从日期d加入用户u上选择u.id,MAX(d.date),u.name d.user_id = u.id GROUP BY d.user_id

答案 3 :(得分: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",
       },
     ],
   }