2017-03-29 11 views
2

を提供し、私は次の表(mTable)SQL文が予期しない結果

id | sent     | number  
--------------------------------------- 
23 | 2017-03-02 00:00:00 | 0 
23 | 2017-03-04 00:00:00 | 0 
45 | 2017-03-15 00:00:00 | 1.8 
45 | 2017-03-17 00:00:00 | 1.9 

id: integer, not unique, no primary key 
sent: timestamp 
number: float 

にSQL文をしました:

SELECT DISTINCT `id`, number as mynum, MAX(`sent`) AS sentOn FROM `mTable` GROUP BY `id` 

結果は次のとおりです。

id | mynum | sentOn 
------------------------------------ 
23 | 0  | 2017-03-04 00:00:00 
45 | 1.8 | 2017-03-17 00:00:00 

期待します結果は次のようになります。

id | mynum | sentOn 
------------------------------------ 
23 | 0  | 2017-03-04 00:00:00 
45 | 1.9 | 2017-03-17 00:00:00 

2番目の行で、最新の送信日時(2017-03-17 00:00:00)のmynum(1.9)になると思います。 SQL-Queryは、2番目目の最新の送信日(2017-03-15 00:00:00)からmynum(1.8)を提供します。

問題を解決するためのヒントですか? ありがとうございました

答えて

1

集計は、最新の値を取得する間違った方法です。ここでは、より適切な方法である:あなたにもmynumためmaximum値が必要な場合

select m.* 
from mtable m 
where m.sent = (select max(m2.sent) from mtable m2 where m.id = m2.id); 
0

、あなたは例えば、mynumMAXを適用する必要があります:あなたがあるGroup By句を使用している

SELECT `id`, MAX(number) as mynum, MAX(`sent`) AS sentOn 
FROM `mTable` 
GROUP BY `id` 
0

違う 。例えば、以下のように...そして、Group Byを使用し、あなたのselectで集計関数を使用します。

SELECT id, MAX(number) as mynum, MAX(sent) AS sentOn 
FROM mTable 
GROUP BY id 

このリンクヘルプのグループについてBY句。 by句

Helping Link For Group By

+0

このグループは、構文のMySQLのような種類には、間違っていないallowed..while SQL Serverがこの –

+0

は、はい、それが許可されていることはできません、しかし、それは間違った結果を与えるです。 –