0

タイトルがあいまいでごめんなさい。しかし、私は今、それをどのように異なって説明するかについては説明しません。

私は次の表を持っています:

imei | date       | time  | some more fields
345  | 2012-06-28 | 07:18 | .....
345  | 2012-06-28 | 07:20 | .....
345  | 2012-06-28 | 07:21 | .....
987  | 2012-06-28 | 07:19 | .....
etc etc

非常に明確なimeiの最新の行を取得したいので、次のようにします。

345  | 2012-06-28 | 07:21
987  | 2012-06-28 | 07:19
  • 結果を使用SELECT * FROM t GROUP BY imeiすると、最後の行の代わりに最初の行が使用されます。
  • で並べ替えるtimeと、サブではなく結果リレーションが明らかに並べ替えられます。
  • 持っていることを使用することは、状態を述べるためだけです...。

これを行うためのクエリを作成するにはどうすればよいですか?

4

4 に答える 4

4

マニュアルに記載されているように:

サーバーは各グループから任意の値を自由に選択できるため、同じでない限り、選択される値は不確定です。さらに、各グループからの値の選択は、ORDER BY句を追加することによって影響を受けることはありません。結果セットの並べ替えは、値が選択された後に行われ、ORDER BYサーバーが選択する値には影響しません。

グループごとの最大値を(必要に応じて)取得するには、グループ化されたサブクエリの結果をテーブルに結合する必要があります。

SELECT * FROM t JOIN (
  SELECT imei, MAX(ADDTIME(date, time)) AS dt FROM t GROUP BY imei
) AS u ON t.imei = u.imei AND t.date = DATE(u.dt) AND t.time = TIME(u.dt)
于 2012-06-28T11:39:05.637 に答える
0

ファヒムは正しい。日付と時刻の列が分かれていると、生活が不必要に難しくなります。どんなに。

これを試して。

SELECT IMEI, MAX(STR_TO_DATE(CONCAT(`date`,` `,'`time`)))
  FROM T
 GROUP BY IMEI

MAX / STR/CONCAT式を正しく取得するためにいじくり回す必要があるかもしれません。

これは、各IMEIアイテムの最大日時を見つける要約クエリです。

于 2012-06-28T11:42:04.450 に答える
0

その投稿を見てください:あるフィールドの日付と別のフィールドの時間を組み合わせる方法-MS SQL Server

これを行うには、SQLステートメントを使用するだけです。

SELECT imei, (date+time) AS datim, [some more fields] FROM yourTable;

次に、仮想フィールドdatimでdistinctのmax、minを使用できます。

于 2012-06-28T12:15:40.083 に答える
-2

多分あなたは両方imeiで注文する必要がありますdatetime

SELECT * FROM t GROUP BY imei ORDER BY imei, date DESC, time DESC
于 2012-06-28T11:37:29.740 に答える