Max函数不显示超过一条记录Mysql

我有两个表“users”和“paymenthistory”,我想获取具有最高“bookingid”的特定“user”的记录,但它只向我显示一条记录,应该显示2条记录,“max”功能的问题,这是我的桌子


表“付款”


id  bookingid   userid

1   142         3       

2   146         2

3   148         3

4   154         5

表“用户”


id      name        

1       abc

2       zyd

3       xyz

4       nwd

这是我的查询


$this->db->select('p.bookingId,MAX(p.bookingId) as lastBookingId,p.userid,u.name');

$this->db->from('payment p');

$this->db->join('users u','p.userid=u.id');

$this->db->where('p.user',"3"); 

显示一条记录,但我想获得 2 条具有相同列“lastbookingid”(相同)的记录,我错在哪里?


莫回无
浏览 177回答 4
4回答

LEATH

您还需要在最大列中添加GROUPBY子句。如果是 SQl,请检查以下查询......select p.bookingId,MAX(p.bookingId) as lastBookingId,p.userid,u.namefrom payment p join users u on p.userid=u.idwhere p.userid=2 group by p.bookingId;请检查输出

慕婉清6462132

你可以试试下面的 SQL 脚本。$this->db->select('*');$this->db->from('payment p');$this->db->join('users u','p.userid=u.id');$this->db->where('p.user',"3");$this->db->order_by("p.bookingId", "DESC");$this->db->limit(2);

阿晨1998

我从你在评论中的回复中得到了你的观点。这是更新的 SQL 语句,它将产生您想要的结果SELECT p.bookingId,(SELECT MAX(x.bookingId) FROM payment x WHERE x.userid = p.userid) AS lastBookingId,p.userid, u.nameFROM payment pLEFT JOIN users u ON p.userid = u.idWHERE p.userid = 3;使用内部 SQL 语句来避免由于使用聚合函数 (max) 导致结果仅显示一行而隐式添加的“分组依据”。这是测试的输出:

繁星点点滴滴

drop table if exists t;create table t(id  int,bookingid int,  userid int);insert into t values(1  , 142   ,      3),       (2  , 146   ,      2),(3  , 148   ,      3),(4  , 154   ,      5);select t.userid,t.bookingid,s.maxbidfrom tjoin(select userid, max(bookingid) maxbid ,count(*) cntfrom tgroup by userid having cnt > 1) son s.userid = t.userid where t.userid = 3 order by t.bookingid;子查询找到最大值并测试外部查询然后加入的预订 ID 的数量。+--------+-----------+--------+| userid | bookingid | maxbid |+--------+-----------+--------+|      3 |       142 |    148 ||      3 |       148 |    148 |+--------+-----------+--------+2 rows in set (0.00 sec)
打开App,查看更多内容
随时随地看视频慕课网APP