繁体   English   中英

比较SQL Server中的两个值

[英]Compare two values in SQL Server

我试图获得在两个集合之间最后到达的值。 这是我正在开发的代码

USE KronosNET22
GO

Select distinct 
    dbo.[Object].Name, dbo.[ObjectSignal_2016_07_22].Code,
    MAX(dbo.[ObjectSignal_2016_07_22].TimeIn) as tiempo
from 
    dbo.[Object],dbo.[ObjectSignal_2016_07_22]
where 
    dbo.[Object].IdClient = '6C74F97C-7253-415D-96B1-4B902D8334D7'
    and (dbo.[ObjectSignal_2016_07_22].Code = 'ON3' or 
         dbo.[ObjectSignal_2016_07_22].Code = 'OFF3' or 
         dbo. [ObjectSignal_2016_07_22].Code = 'E401' or 
         dbo.[ObjectSignal_2016_07_22].Code = 'R401')
    and dbo.[Object].Name = dbo.[ObjectSignal_2016_07_22].ObjectName
group by 
    dbo.[Object].Name, dbo.[ObjectSignal_2016_07_22].Code
order by 
    dbo.[Object].Name, MAX(dbo.[ObjectSignal_2016_07_22].TimeIn) desc

这就是我得到的结果

AV CHILE PORCIUNCULA    ON3 1469211062
AV CHILE PORCIUNCULA    OFF3    1469195866
CALIMA  ON3 1469230879
CALIMA  OFF3    1469217492
CAMPANARIO POPAYAN  ON3 1469210662
CAMPANARIO POPAYAN  OFF3    1469203155
EL PROGRESO -- DOS QUEBRADAS    OFF3    1469194694
EL PROGRESO -- DOS QUEBRADAS    ON3 1469146950
EXITO -- SUBA   ON3 1469214392
EXITO -- SUBA   OFF3    1469199388
MEGACITY ZIPAQUIRA  OFF3    1469194774
MERCURIO    ON3 1469231767
MERCURIO    OFF3    1469198081
METROPOLITANO   ON3 1469228672
METROPOLITANO   OFF3    1469225061
NIZA    OFF3    1469218151
NIZA    ON3 1469214985
PLATINO     ON3 1469228261
PLATINO     OFF3    1469217680
PORTAL DEL PRADO    OFF3    1469147653
TITAN PLAZA OFF3    1469213346
TITAN PLAZA ON3 1469211705

我怎样才能使它只显示较高的值,所以我在同一位置没有得到两个值。

您确实应该开始使用ANSI-92样式的联接。 他们已经存在了20多年了。 那些用逗号分隔的表名是一个坏习惯。

在同一查询中使用distinct和group by没有意义。

您还应该使用别名使查询更清晰。 至于您的实际问题,您可以使用ROW_NUMBER。 这样的事情应该非常接近。

with MySortedResults as
(
    Select 
        o.Name
        , os.Code
        , os.TimeIn as tiempo
        , ROW_NUMBER() over (partition by o.Name order by os.TimeIn desc) as RowNum
    from dbo.[Object] o
    join dbo.[ObjectSignal_2016_07_22] os on o.Name = os.ObjectName
    where 
        o.IdClient = '6C74F97C-7253-415D-96B1-4B902D8334D7'
        and os.Code IN ('ON3', 'OFF3', 'E401', 'R401')    
)   

select sr.Name
    , sr.Code
    , sr.tiempo
from MySortedResults sr
where sr.RowNum = 1
order by sr.Name

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM