1

私はDBテーブル構造を持っています

ID、緯度、経度、高度、deviceID、createdDate

最新に作成されたすべての DISTINCT deviceID を取得するクエリを作成しようとしています..

クエリを試してみました

SELECT DISTINCT deviceID
FROM `devicePosition`
ORDER BY createdDate desc 
4

4 に答える 4

1

beiller の投稿に基づいて、次の解決策を試してください。

SELECT deviceID, createdDate

FROM `devicePosition` outer_dev_pos

WHERE createdDate = (
    select max(inner_dev_pos.createdDate)
    from `devicePosition` inner_dev_pos
    where inner_dev_pos.deviceID = outer_dev_pos.deviceID
)

ORDER BY createdDate desc;

更新:説明:

このクエリでは、同じテーブルに 2 回アクセスしています。1 回は外部選択で、もう 1 回は副選択 (内部選択) です。そのため、どのアクセスの deviceID と createdData が意味するかをクエリで伝える必要があります。これは、副選択の where 句で最も重要です。

where inner_dev_pos.deviceID = outer_dev_pos.deviceID

同じテーブルの 2 つのアクセスにエイリアス名 inner_dev_pos と outer_dev_pos を使用しなかった場合、この行は次のようになります。

where deviceID = deviceID

これは明らかに意味がありません。

于 2013-08-15T15:19:36.677 に答える
1

これを実現するために、mysql で limit を使用できます。

SELECT DISTINCT deviceID, createdDate 
FROM `devicePosition`
ORDER BY createdDate desc 
limit 1

また、 where 句を使用できます

SELECT DISTINCT deviceID, createdDate 
FROM `devicePosition`
WHERE createdDate = (select max(createdDate) from `devicePosition`)
于 2013-08-15T15:14:32.913 に答える
0

deviceID と last createdDate のペアだけを取得する場合は、次を使用しますGROUP BY

SELECT deviceID, max(createdDate)
FROM `devicePosition`
GROUP BY deviceID
ORDER BY createdDate desc;

これにより、 deviceIDごとに最大の createdDate がフェッチされます。

于 2013-08-15T15:29:34.693 に答える