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

次のようなことはできませんか?

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 句を入れて 1 で制限し、本質的に MAX と同じ最初のものを与えることができます (私は思う) したがって、JOIN を完全に削除します。

編集:GROUP BY identdも必要だとは思いませんでした

于 2009-04-09T14:45:32.503 に答える
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 に答える