【发布时间】:2019-05-11 20:56:30
【问题描述】:
我有一些数据包含 DeviceID 列、扫描时间列和其他一些列。
对于每个设备 ID,我只想根据扫描时间返回最新的行。
我正在尝试创建此查询,以便可以将其用作数据视图和报告。
该数据库是 Microsoft SQL Server 数据库,我正在从 SQL Server 2014 Management Studio 运行查询。
我最接近让它工作的是:
SELECT
DeviceID,
AVSolutionName,
DefinitionsUpToDate,
ScanningEnabled,
Expired,
ScanTime
FROM
dbo.fact_AVSecurity
WHERE
(ScanTime IN (SELECT DISTINCT MAX(ScanTime) AS LastScan
FROM dbo.fact_AVSecurity AS Avs
GROUP BY DeviceID))
不幸的是,这会为同一个 ID 返回多个值。
ScanTime ScanningEnabled Expired DeviceID DefinitionsUpToDate AVSolutionName
10/12/2018 10:13 TRUE FALSE 15994 TRUE Webroot SecureAnywhere
4/12/2018 14:30 TRUE TRUE 15994 TRUE Webroot SecureAnywhere
我想要返回的只是最近的第一行:
ScanTime ScanningEnabled Expired DeviceID DefinitionsUpToDate AVSolutionName
10/12/2018 10:13 TRUE FALSE 15994 TRUE Webroot SecureAnywhere
我尝试了不同的方法,例如: SQL - Returning only the most recent row
但似乎无法让它们工作。我不确定这是否是我做错了,或者我使用的特定品牌的 SQL 没有做到“前 1”的事情。
有没有办法做我所追求的?我与我所拥有的有多接近?
【问题讨论】:
标签: sql sql-server sql-server-2012