我遇到了以下SQL查询和MySQL的问题
SELECT
id, cpid, label, cpdatetime
FROM
mytable AS a
WHERE
id NOT IN
(
SELECT
id
FROM
mytable AS b
WHERE
a.label = b.label
AND
a.cpdatetime > b.cpdatetime
)
AND
label LIKE 'CB%'
AND
cpid LIKE :cpid
GROUP BY label
ORDER BY cpdatetime ASC
这个表格看起来像这样
1 | 170.1 | CB55 | 2013-01-01 00:00:01
2 | 135.5 | CB55 | 2013-01-01 00:00:02
3 | 135.6 | CB59 | 2013-01-01 00:00:03
4 | 135.5 | CM43 | 2013-01-01 00:00:04
5 | 135.5 | CB46 | 2013-01-01 00:00:05
6 | 135.7 | CB46 | 2013-01-01 00:00:06
7 | 170.2 | CB46 | 2013-01-01 00:00:07
我希望我的查询返回
3 | 135.6 | CB59
5 | 135.5 | CB46
编辑
标签是狗/猫,cpid是临时家庭,用于收养狗/猫。
狗/猫会从一个家庭移动到另一个家庭。
我需要查找在:userinput家庭中的狗/猫,但仅限于它们以前不在其他家庭中的情况。
我不能更改数据库,只能使用现有数据进行操作,而且我不是编写应用程序/数据库模式的人。
:cpid = '13%'
的原因吗? - lc.LIKE
,这样不高效且可能会得到错误的结果。例如,使用a.cpid LIKE '135%'
,一个值为1357.16
的数据仍然会通过条件。应该使用:a.cpid >= 135.0 AND a.cpid < 136.0
。 - ypercubeᵀᴹ