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


how to select a row relative to the max of a row

我有这个查询-

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

如果您能给我一个答复,我将不胜感激

如果我理解正确,你只想返回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

要获得与MAX(checkdate)对应(在同一行上)的checkin值,您必须创建子查询或额外的左连接来过滤tbl_check .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

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