1

db_system と db_events の 2 つの mysql データベースがあり、すべてのデバイス (db_system) の最後のイベント (db_events) を取得する必要があります。

    SELECT * FROM db_events.events WHERE db_events.events.device_id IN (
            SELECT device_id 
            FROM db_system.devices 
            WHERE db_system.devices.vendor = 1)
    ORDER BY db_events.events.id DESC LIMIT 1

しかし、私はそれを手に入れることができません.私はレコードを1つしか手に入れていません.それを手に入れる方法がわかりません.誰か助けてください. どうもありがとう。

4

1 に答える 1

1

これはMAX(Id)、各 Device_ID を使用して機能するはずです。

SELECT e.* 
FROM db_events.events e 
   JOIN (
      SELECT Max(id) MaxId, device_id
      FROM db_events.events
      GROUP BY device_id ) e2 on e.Id = e2.MaxId AND e.device_id = e2.device_id
WHERE e.device_id IN (
            SELECT device_id 
            FROM db_system.devices 
            WHERE vendor = 1)
ORDER BY e.id DESC

おそらく ORDER BY はもう必要ありません。結果が必要な場合に備えて、そのままにしておきました。

また、これは、Max(Id) が各デバイスの最新のイベントを決定するものであると想定しています。上記の ID DESC で注文していたので、これを想定しています。そうでない場合は、代わりに同じロジックで DateTime 列を使用できます。

于 2013-02-18T21:12:17.337 に答える