我有一个MySQL表,其中包含以下设置:
CREATE TABLE IF NOT EXISTS `coords` (
`project_id` int(4) NOT NULL,
`day` tinyint(4) NOT NULL,
`x` tinyint(4) NOT NULL,
`y` tinyint(4) NOT NULL,
`z` tinyint(4) NOT NULL,
PRIMARY KEY (`tid`,`day`,`x`,`y`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
每个项目都运行了好几天。每天都会对一些案例进行测试,并将结果(坐标集)保存在此表中(以及项目ID和日期编号)。可以比一次更多地保存相同的x和y坐标集(z坐标是实际结果)。
现在,我希望获得具有最新数据的单个项目的所有可用坐标集。
即,假设我有以下数据:
pid | day | x | y | z
1 | 1 | 2 | 1 | 5
1 | 1 | 2 | 2 | 6
1 | 2 | 3 | 3 | 7
1 | 3 | 2 | 1 | 8
1 | 3 | 3 | 3 | 9
现在查询将返回:
day | x | y | z
1 | 2 | 2 | 6
3 | 2 | 1 | 8
3 | 3 | 3 | 9
我正在尝试关注查询:
SELECT day, x, y, z
FROM coords
WHERE pid = 1
GROUP BY CONCAT(tid,'.',x,'.',y)
ORDER BY day DESC
但是这个查询返回旧数据,就像day = 1,x | y | z = 2 | 1 | 5而不是day = 3和x | y | z = 2 | 1 | 8。
有人可以指出我在这里错过的正确方向吗?
提前致谢, 保罗
答案 0 :(得分:1)
Select * from coords order by day asc limit 1
,你就会随机出现。 2.1.5或2.2.6。取决于数据库的感受。根据数据库知道插入这些行的顺序,你肯定需要更具体的“假日”或ID或其他内容。例如,在那里添加一个id字段。
Select distinct day, x,y,z
FROM coords
where pid = 1
order by id desc
如果你在那里添加id字段
,这可能会有用答案 1 :(得分:1)
试试这个:)。
SELECT
day,
x,
y,
z
FROM
coords
JOIN
(SELECT MAX(tid) AS max_tid FROM coords GROUP BY CONCAT_WS('.', day, x, y)) sub ON (sub.max_tid = coords.tid)
WHERE
pid = 1