1
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
4

3 回答 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 回答