【发布时间】:2021-01-06 13:56:46
【问题描述】:
我正在尝试运行一个 SQL 查询,以获取与子集相关的最新结果。
鉴于设备 1 已链接到设备 3,我希望查询将设备 1 的颜色显示为设备 3 的颜色,因为设备 1 已链接到设备 3,并且设备 3 的颜色最近已更改。
当前结果:
Device | Color
-------+---------
1 | red
2 | blue
3 | green
我想要什么:
Device | Color
-------+---------
1 | GREEN
2 | blue
3 | GREEN
设备表
account_id
----------
1
2
3
信标表
account_id | Color | Time
-----------+--------+--------
1 | red | 6:00
2 | blue | 7:00
3 | red | 8:00
3 | green | 10:00
链接表
account_id | Link
------------+--------
1 | 3
2 | -
3 | -
这就是我现在正在做的事情,这会导致设备的最新颜色,但不是链接设备。
SELECT d.* , b.*
FROM Device d
JOIN Beacons b ON d.account_id = b.account_id
JOIN (
SELECT b.account_id,
MAX(b.timestamp) as max_date
FROM Beacons b
GROUP BY b.account_id) x ON x.account_id = d.account_id
AND x.max_date = b.timestamp
【问题讨论】:
-
您使用的是哪个 dbms?请标记它
-
刚刚添加的Sqlite
-
您只谈到了要被链接 id 覆盖的颜色,但是
timestamp列或任何列呢? -
如果设备 3 链接到设备 5 并且最近更改了设备 5 的颜色怎么办?在这种情况下,您希望得到什么结果?
-
如果设备 3 链接到设备 5,它应该显示设备 5 的颜色。但是,如果设备 1 未链接到设备 5,它仍应仅显示最新的颜色设备 3。
标签: sql sqlite join window-functions