SQL选择多个值存储过程
本文关键字:存储过程 选择 SQL | 更新日期: 2023-09-27 18:27:39
我有两个表:设备详细信息:具有每个设备的详细信息其他表设备记录。
我想在设备列表上做出选择声明,以从设备详细信息中获得每个设备的最高记录:
SELECT TOP 1
[t].[DeviceNumber]
, [d].[CarNumber] AS [CarNumber]
, [t].TimeStamp
FROM [DeviceRecords] AS [t]
LEFT JOIN [Device_Details] AS [d]
ON [t].[DeviceNumber] = [d].[AVL_DeviceNumber]
WHERE [t].[DeviceNumber] IN ('013950003919546', '358244017672256', '013950003919876', '013227005026319', '013226001974274')
ORDER BY
[t].TimeStamp DESC
我没有在C#中单独执行For Loop和查询每个设备,而是在思考如何在一次查询中完成,该查询返回每个设备的TOP记录。
当您可以使用APPLY
:时就是这种情况
select t.DeviceNumber,
oa.CarNumber,
t.TimeStamp
from [DeviceRecords] as t
outer apply(select top 1 CarNumber
from [Device_Details] as d
where t.DeviceNumber = d.AVL_DeviceNumber
order by ... desc) oa
where t.DeviceNumber in ('013950003919546', '358244017672256',
'013950003919876', '013227005026319', '013226001974274')
您应该将...
替换为详细信息表中相应的列。
尝试使用子查询
SELECT TOP 1
[t].[DeviceNumber]
, [d].[CarNumber] AS [CarNumber]
, [t].TimeStamp
FROM (Select [i].[DeviceNumber], MAX([i].[TimeStamp]) as 'TimeStamp'
from [DeviceRecords] AS [i]
group by [i].[DeviceNumber]) AS [t]
LEFT JOIN AS [d]
ON [t].[DeviceNumber] = [d].[AVL_DeviceNumber]
WHERE [t].[DeviceNumber] IN ('013950003919546', '358244017672256', '013950003919876', '013227005026319', '013226001974274')
ORDER BY
[t].TimeStamp DESC