2

Between Clauseを使用してクエリを実装しようとしていますが、これにはいくつかの問題があります

S_E1 の最初のクエリ:

このクエリは、必要な正確なデータを返します。ここでは、データ数は 43 です。

select RECORD_TIMESTAMP as DateRecorded, ROUND (S_E1 ,2 )as S_E1
from TBL_SENSORS
Where RECORD_TIMESTAMP Between '4/28/2012 12 :00 AM' 
                           and '5/17/2012 12 :00 AM'
And ( S_E1 Between 10 And 100 )

S_E2 の 2 番目のクエリ:

このクエリは、必要な正確なデータを返します。ここでは、データ数は 68 です。

select RECORD_TIMESTAMP as DateRecorded, ROUND (S_E2 ,2 )as S_E2
from TBL_SENSORS
Where RECORD_TIMESTAMP Between '4/28/2012 12 :00 AM'
                           and '5/17/2012 12 :00 AM'
And ( S_E2 Between 10 And 100 )

問題 :

しかし、これらを単一のクエリでクエリに組み合わせると、間違ったデータが返されます.73行が返されます.111行が必要だと思います

select RECORD_TIMESTAMP as DateRecorded, 
       ROUND (S_E2 ,2 )as S_E2, 
       ROUND (S_E1 ,2 ) as S_E1
from TBL_SENSORS
Where RECORD_TIMESTAMP Between '4/28/2012 12 :00 AM'
                           and '5/17/2012 12 :00 AM'
And ( S_E2 Between 10 And 100) 
and (S_E1 Between 10 And 100  )

ここで私が間違っている場所を教えてください..

4

4 に答える 4

1

opeartorORの代わりに使用AND

SELECT RECORD_TIMESTAMP AS DateRecorded, 
       Round (S_E2, 2)  AS S_E2, 
       Round (S_E1, 2)  AS S_E1 
FROM   TBL_SENSORS 
WHERE  RECORD_TIMESTAMP BETWEEN '4/28/2012 12 :00 AM' AND '5/17/2012 12 :00 AM' 
       or ( S_E2 BETWEEN 10 AND 100 ) 
       or ( S_E1 BETWEEN 10 AND 100 ) 

クエリでは、2つの条件に共通のレコードが存在する可能性があるため、111レコードが取得されるとは限りません。

条件1-( S_E2 BETWEEN 10 AND 100 )

条件2-( S_E1 BETWEEN 10 AND 100 )

または

2つのクエリでUnionAllを使用して、すべてのレコードを取得します(111)。

select RECORD_TIMESTAMP as DateRecorded, ROUND (S_E1 ,2 )as S_E1, 0 as S_E2
from TBL_SENSORS
Where RECORD_TIMESTAMP Between '4/28/2012 12 :00 AM' and '5/17/2012 12 :00 AM'
And ( S_E1 Between 10 And 100 )

UNION ALL

select RECORD_TIMESTAMP as DateRecorded, 0 as S_E1, ROUND (S_E2 ,2 ) as S_E2
from TBL_SENSORS
Where RECORD_TIMESTAMP Between '4/28/2012 12 :00 AM'
and '5/17/2012 12 :00 AM'
And ( S_E2 Between 10 And 100 )
于 2012-05-17T10:03:59.300 に答える
1

2つのステートメントを結合するか、ANDの代わりに「OR」を使用する必要があると思います。

select RECORD_TIMESTAMP as DateRecorded,ROUND (S_E2 ,2 )as S_E2,ROUND (S_E1 ,2 )as S_E1 from TBL_SENSORS Where RECORD_TIMESTAMP Between '4/28/2012 12 :00 AM' and '5/17/2012 12 :00 AM' AND (( S_E2 Between 10 And 100) OR(S_E1 Between 10 And 100 ))
于 2012-05-17T10:04:03.980 に答える
1

余分な括弧を配置してブール論理を変更し、最後の AND を OR に置き換えます。

select RECORD_TIMESTAMP as DateRecorded, 
       ROUND (S_E2 ,2 )as S_E2, 
       ROUND (S_E1 ,2 ) as S_E1
from TBL_SENSORS
Where RECORD_TIMESTAMP Between '4/28/2012 12 :00 AM'
                           and '5/17/2012 12 :00 AM'
And (( S_E2 Between 10 And 100) 
OR (S_E1 Between 10 And 100  ))
于 2012-05-17T10:09:42.330 に答える
1

問題は S_E2 と S_E1 の制限にあります。

それらが意図したとおりに機能するには、次を使用する必要がありますUNION ALL

select RECORD_TIMESTAMP as DateRecorded, ROUND (S_E1 ,2 )as S_E
from TBL_SENSORS
Where RECORD_TIMESTAMP Between '4/28/2012 12 :00 AM' and '5/17/2012 12 :00 AM'
And ( S_E1 Between 10 And 100 )

UNION ALL

select RECORD_TIMESTAMP as DateRecorded, ROUND (S_E2 ,2 )as S_E
from TBL_SENSORS
Where RECORD_TIMESTAMP Between '4/28/2012 12 :00 AM'
and '5/17/2012 12 :00 AM'
And ( S_E2 Between 10 And 100 )

または、次ORのように の代わりにを使用しますAND

select RECORD_TIMESTAMP as DateRecorded, 
       ROUND (S_E2 ,2 )as S_E2, 
       ROUND (S_E1 ,2 ) as S_E1
from TBL_SENSORS
Where RECORD_TIMESTAMP Between '4/28/2012 12 :00 AM'
                           and '5/17/2012 12 :00 AM'
And ( (S_E2 Between 10 And 100) OR (S_E1 Between 10 And 100)  )

制限の唯一の違いは S_E1 列と S_E2 列の違いであるため、使用する場合AND、すべてのレコードが両方の制限を尊重する必要があると言っています。分離されたクエリでは、1つだけを尊重するため、メインクエリでそのようにする必要があります。

于 2012-05-17T10:06:06.717 に答える