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
次のようなことはできませんか?
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 に答える