我有这个查询 -
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
如果我能得到答案,我将非常感激
答案 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仍然可以是两行中的任何一行。