如何在sql中找到增加的列?

时间:2014-01-22 16:00:43

标签: sql sql-server

我在SQL中有两个表。

dbo.DataSensor和dbo.Dealers

     dbo.Dealers

  OID   Name     Location  DeviceID 
   1    BLABLA    BLABLA     1234
   2    ABC       BLABLA     232
   3    XYZ       BLABLA     412
   4    CDS       BLABLA     3421
   (...)

当经销商通过阅读DriverCard从油轮取油时,经销商的阀门打开,装置发送到SQL Valve = 1,CardID = blabla.LevelTank1从油轮装满后增加。

 dbo.DataSensor

 OID  DeviceID    readTime             LevelTank1   Valve       CardID
 1     1234      2014-01-22 16:26:01     45         1           a12xyz 
 2     232       2014-01-22 14:26:01     70         1           sd211
 3     412       2014-01-22 13:26:01     80         1           sf212
 4     3421      2014-01-22 12:26:01     35         1           fs2134
 (...)

但是,当Valve = 0且CardID =''时,某些经销商的LevelTank1有时会增加。如何在过去30天内找到此实例中的所有DeviceID?

1 个答案:

答案 0 :(得分:0)

非常简单的查询。我输入了处理空格或NULLS的函数。但是,这使得该列不具有SARGABLE。如果表很大,我建议确保干净的数据进入。然后用S.CARD =''替换。

-- Handle Nulls and empty space, return distinct list in order.
SELECT 
    DeviceId
FROM 
    dbo.DataSensor as S
WHERE 
    S.VALUE = 0 AND 
    REPLACE(COALESCE(S.CARD, ''), ' ', '') = '' AND
    S.READTIME >= DATEADD(D, -30, CAST(GETDATE() AS DATE))
GROUP BY 
    DeviceId
ORDER BY 
    DeviceId ASC