SELECT
number, count(id)
FROM
tracking
WHERE
id IN (SELECT max(id) FROM tracking WHERE splitnr = 'a11' AND number >0 AND timestamp >= '2009-04-08 00:00:00' AND timestamp <= '2009-04-08 12:55:57' GROUP BY ident)
GROUP BY
number
问问题
496 次
3 回答
1
这个怎么样:
SELECT number, count(id)
FROM tracking
INNER JOIN (SELECT max(id) ID FROM tracking
WHERE splitnr = 'a11' AND
number >0 AND timestamp >= '2009-04-08 00:00:00' AND
timestamp <= '2009-04-08 12:55:57'
GROUP BY ident
) MID ON (MID.ID=tracking.id)
WHERE
GROUP BY number
于 2009-04-09T14:35:08.050 回答
0
在没有看到数据并确切知道您要实现的目标的情况下,很难确保我完全正确,但我个人会将子查询变成一个视图,然后加入它,所以:
create view vMaximumIDbyIdent
as
SELECT ident, max(id) maxid
FROM tracking
WHERE splitnr = 'a11' AND number >0
AND timestamp >= '2009-04-08 00:00:00'
AND timestamp <= '2009-04-08 12:55:57'
GROUP BY ident
then:
SELECT
number, count(id)
FROM
tracking,
vMaximumIDbyIdent
WHERE
tracking.id = vMaximumIDbyIdent.maxid
GROUP BY
number
更具可读性和可维护性。
于 2009-04-09T14:35:45.350 回答
0
你能不能做这样的事情:
SELECT
number,
count(id)
FROM
tracking
WHERE
splitnr = 'a11' AND number > 0 AND timestamp >= '2009-04-08 00:00:00' AND timestamp <= '2009-04-08 12:55:57'
GROUP BY
number
ORDER BY
number DESC
LIMIT 0,1
(顺便说一句,我真的不知道 MySQL)
我假设这会给您返回相同的结果集,您按数字 desc 对其进行排序,因为您想要最大的一个,对吗?然后,您可以将 WHERE 子句放入其中并将其限制为一个,从而为您提供第一个与 MAX 基本相同的子句(我认为),从而完全删除 JOIN。
编辑:我认为您也不需要 GROUP BY identd
于 2009-04-09T14:45:32.503 回答