我有一個MySQL表有以下設置:如何從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。
有人能請我指出我在這裏失蹤的正確方向嗎?
由於提前, 保羅
但是,這一天是某種id(雖然不是唯一的),不是嗎?同一套x,y座標只能每天提交一次。所以通過按日排序和一天的額外分組排序,我認爲這應該做到這一點。 – Paul 2011-02-06 21:16:06
但是數據庫仍然有問題知道哪一行最後被插入。在這種情況下,順序沒有意義。如果你不想做太複雜的查詢,你應該考慮添加該id字段。 – exus 2011-02-06 21:25:14