我有以下的数据库结构:复杂的MySQL数据库查询
站点表
id | name | other_fields
备份表
id | site_id | initiated_on(unix timestamp) | size(float) | status
所以Backups
表有一个与多对一的关系Sites
表通过连接
而且我想输出的格式如下
name | Latest initiated_on | status of the latest initiated_on row
的数据和我有以下SQL查询
SELECT *, `sites`.`id` as sid, SUM(`backups`.`size`) AS size
FROM (`sites`)
LEFT JOIN `backups` ON `sites`.`id` = `backups`.`site_id`
WHERE `sites`.`id` = '1'
GROUP BY `sites`.`id`
ORDER BY `backups`.`initiated_on` desc
的事情是,上述查询我可以实现我在寻找的东西,但唯一的问题是我没有得到最新的initiated_on
值。
所以,如果我在backups
有3行与site_id
= 1
,查询不initiated_on
挑选出具有最高值的行。它只是挑出任何一行。
请帮帮忙,并
在此先感谢。
当你有一个GROUP BY时,你不应该编写SELECT * - 你将返回的值将是任意的。在大多数DB中,这甚至不是有效的SQL语句。 (即使你不使用GRUOP BY,SELECT *仍然被认为是一种不好的做法)。 – 2012-02-10 14:55:30
我可以将它更改为'SELECT sites。*'? – ekhaled 2012-02-10 15:00:14
你还没有在你的SELECT中加入initiate_on,这可能是为什么它没有返回它。 – CBusBus 2012-02-10 15:26:57