【发布时间】:2014-01-01 02:47:39
【问题描述】:
我有一个基于下表结构的 SQL 问题。 数据库目前在 MS Access 中,并计划迁移到 SQL Server。查询应该在两个 DBMS 中都可以工作。
我想根据 dswTimestamp 获取相关设备的 devName 和最新的 dswSW_Version。如果不存在 SW 历史记录,我只想返回 devName。
我能得到的最接近的是:
SELECT dev.devname, dsw1.dswsw_version
FROM device_sw_history AS dsw1 RIGHT JOIN device AS dev
ON dsw1.dswdevid = dev.devid
WHERE dsw1.dswtimestamp = (SELECT MAX(dswtimestamp) FROM device_sw_history AS dsw2 WHERE dsw1.dswdevid = dsw2.dswdevid)
AND devid = @devid
但由于 MAX 返回 null,因此 devid = 2 没有返回任何内容。我想返回 Apple,null。
有没有办法在不使用 UNION 的情况下构造此语句,并且即使不存在 SW 历史记录仍返回 devname ?
Device:
devid devname
1 Samsung
2 Apple
Device_SW_History:
dswid dswdevid dswtimestamp dswsw_version
1 1 5/dec/13 One
2 1 6/dec/13 Two
谢谢!
【问题讨论】:
-
如果您添加信息您正在使用的 DBMS 可能会有所帮助。
-
您需要的信息取决于您使用的数据库。用这个完成你的问题。
-
抱歉没提。添加了 DBMS:最好是 Access 和 SQL Server。访问仅限于它所理解的内容。
标签: sql sql-server ms-access outer-join