如何选择相对于行的最大值的行

时间:2014-06-24 17:46:04

标签: php mysql

我有这个查询 -

SELECT d.sn,d.alias,d.CompanyID,max(checkdate),checkin 
FROM tbl_checkin ch 
right join tbl_device d 
on ch.sn=d.sn 
group by ch.sn 
order by max(checkdate) desc

这些在运行时选择随机签到

但我想要实现的是一个查询,根据显示与max(checkdate)

对应的签到的max(checkdate)来选择签到
sn              alias            compid      max(checkdate)    checkin
4223642350043   DANTATA-SAWOE_1  1057     2014-06-05            14:10:01
4223642350051   DANTATA-SAWOE_2  1057     2014-05-28           17:04:46
4223642350067   DANTATA-SAWOE_3A 1057     2014-05-13           15:50:44
0278135000136   DANTATA-SAWOE_4  1057       null                    null

如果我能得到答案,我将非常感激

2 个答案:

答案 0 :(得分:0)

如果我理解正确你只想返回1行 - 请使用LIMIT:

SELECT d.sn,d.alias,d.CompanyID,max(checkdate),checkin 
FROM tbl_checkin ch 
RIGHT JOIN tbl_device d 
ON ch.sn=d.sn 
GROUP BY ch.sn 
ORDER BY MAX(checkdate) DESC
LIMIT 1

答案 1 :(得分:0)

要获取与MAX(checkdate)对应(在同一行)的签入值,您必须创建子查询或其他左连接以过滤tbl_checkin.checkin的值。这已在其他地方得到解答,因为这是一个常见的困境:

SQL Select only rows with Max Value on a Column

在任何情况下,如果我输入错误,这应该可能是次要的修改:

SELECT d.sn,d.alias,d.CompanyID,ch.checkdate,ch.checkin 
FROM tbl_device d
    LEFT JOIN tbl_checkin ch on ch.sn=d.sn 
    LEFT JOIN tbl_checkin ch2 on ch2.sn=d.sn AND ch2.checkdate > ch.checkdate
WHERE ch2.checkdate IS NULL
ORDER BY ch.checkdate DESC

注意:如果你有两个具有相同MAX(checkdate)的ch行,那么ch.checkin仍然可以是两行中的任何一行。