【发布时间】:2017-05-29 07:30:19
【问题描述】:
我在这里查看了大多数其他解决方案,但它们似乎都不适合我。我有一张表,里面有大约 100K 行。
每一行都是来自 iot 设备的记录,其中包括该设备的唯一 ID。设备 id 可能有 100K 中的 10K 行。
Reading::whereIn('device_id', $ids)->orderBy('created_at',
'DESC')->groupBy('device_id')->get()->
我能够提取我需要的 id 并将它们按上面查询的“device_id”分组在一起,但它会选择第一个结果而不是每个 id 的最后一个结果。
如何获取每个 id 的最新记录而不是最旧的记录?
我看过 laravel 集合和 reverse(), first(), latest();选项,但我仍然无法获得它
有什么想法吗?
更新
我能想到的最好的就是下面这个查询,它确实获取了每个 device_id 的最新记录
SELECT t1.* FROM readings t1 WHERE t1.id = (SELECT t2.id FROM readings
t2 WHERE t2.device_id = t1.device_id ORDER BY t2.id DESC LIMIT 1)
然后我将遍历这些结果并仅获取用户有权访问的记录。
不漂亮,但它现在工作。
如果有人真的想用雄辩的方式来做这件事,请回答
【问题讨论】: