我在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?
答案 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