590
社区成员
发帖
与我相关
我的任务
分享
select tt.*,case WHEN AcquisitionTime is null or (DATEDIFF(mi,AcquisitionTime,GETDATE()) > 10) or (DATEDIFF(mi,AcquisitionTime,GETDATE()) > 10)
THEN '/Eonline;component/bin/Debug/Image/MonitoringsiteImages/离线.png' ELSE '/Eonline;component/bin/Debug/Image/MonitoringsiteImages/在线.png' END AS devicestatus from
(select b.Devicecode,b.MonitoringsiteName,(select MAX(c.AcquisitionTime) from Gisdata c where b.Devicecode=c.Devicecode and b.ChannelID=c.ChannelID) as AcquisitionTime
from MonitoringsiteInfo b JOIN IntervalInfo a on b.IntervalID = a.IntervalID where a.StationID=@StationID)tt order by Devicecode,AcquisitionTime
select b.Devicecode ,b.MonitoringsiteName,
case
when AcquisitionTime is null
or ( datediff(mi, c.AcquisitionTime, getdate()) > 10 )
or ( datediff(mi, c.AcquisitionTime, getdate()) > 10 )
then '/Eonline;component/bin/Debug/Image/MonitoringsiteImages/离线.png'
else '/Eonline;component/bin/Debug/Image/MonitoringsiteImages/在线.png'
end as devicestatus
from MonitoringsiteInfo b
join IntervalInfo a on b.IntervalID = a.IntervalID
left join Gisdata c on b.Devicecode = c.Devicecode and b.ChannelID = c.ChannelID
and c.AcquisitionTime=(select max(x.AcquisitionTime) from Gisdata x where x.Devicecode=c.Devicecode and x.ChannelID=c.ChannelID)
where a.StationID = @StationID
先检查执行计划,看最耗成本的位置在哪,是否能应用到已创建的索引,尽可能减少table/index scan操作,多index seek.
SELECT b.Devicecode ,
b.MonitoringsiteName ,
( SELECT CASE WHEN MAX(AcquisitionTime) IS NULL
OR ( DATEDIFF(mi, AcquisitionTime,
GETDATE()) > 10 )
OR ( DATEDIFF(mi, AcquisitionTime,
GETDATE()) > 10 )
THEN '/Eonline;component/bin/Debug/Image/MonitoringsiteImages/离线.png'
ELSE '/Eonline;component/bin/Debug/Image/MonitoringsiteImages/在线.png'
END AS devicestatus
FROM Gisdata c
WHERE b.Devicecode = c.Devicecode
AND b.ChannelID = c.ChannelID
) AS AcquisitionTime
FROM MonitoringsiteInfo b
JOIN IntervalInfo a ON b.IntervalID = a.IntervalID
WHERE a.StationID = @StationID
ORDER BY Devicecode ,
AcquisitionTime
SELECT b.devicecode,
b.monitoringsitename,
ca.acquisitiontime,
CASE WHEN acquisitiontime IS NULL
OR (Datediff(mi,acquisitiontime,Getdate()) > 10)
/* 条件重复
OR (Datediff(mi,acquisitiontime,Getdate()) > 10)
*/
THEN '/Eonline;component/bin/Debug/Image/MonitoringsiteImages/离线.png'
ELSE '/Eonline;component/bin/Debug/Image/MonitoringsiteImages/在线.png'
END AS devicestatus
FROM monitoringsiteinfo b
JOIN intervalinfo a
ON b.intervalid = a.intervalid
OUTER APPLY (
SELECT TOP 1 acquisitiontime
FROM gisdata c
WHERE b.devicecode = c.devicecode
AND b.channelid = c.channelid
ORDER BY acquisitiontime DESC
) ca
WHERE a.stationid = @StationID
ORDER BY devicecode, acquisitiontime