私はDBテーブル構造を持っています
ID、緯度、経度、高度、deviceID、createdDate
最新に作成されたすべての DISTINCT deviceID を取得するクエリを作成しようとしています..
クエリを試してみました
SELECT DISTINCT deviceID
FROM `devicePosition`
ORDER BY createdDate desc
私はDBテーブル構造を持っています
ID、緯度、経度、高度、deviceID、createdDate
最新に作成されたすべての DISTINCT deviceID を取得するクエリを作成しようとしています..
クエリを試してみました
SELECT DISTINCT deviceID
FROM `devicePosition`
ORDER BY createdDate desc
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
これは明らかに意味がありません。
これを実現するために、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`)
deviceID と last createdDate のペアだけを取得する場合は、次を使用しますGROUP BY
。
SELECT deviceID, max(createdDate)
FROM `devicePosition`
GROUP BY deviceID
ORDER BY createdDate desc;
これにより、 deviceIDごとに最大の createdDate がフェッチされます。