3

私は ESRI SQL ユーザーなので、クエリSELECT * FROM tablename WHERE:で開始する必要があります。

日付/時刻フィールド (timedate と呼ばれる) を持つ GPS ベースの車両記録 (除雪機) があり、A.) 別のテーブルの整数フィールドに基づいて、過去 x 時間に発生した記録を選択するか、 B.) 別のテーブルの日付/時刻フィールドに基づいて、日付/時刻よりも新しいレコードを選択します。ケース A の場合、ケース B のフィールドは null になります。ケース B の場合、ケース A のフィールドは 0 になります。

以下はケースAについて書いたものです。

SELECT * FROM myDataTable
WHERE(DATEDIFF(hh, TimeDate, GETDATE()) <= (select NumberofHours from myHoursControlTable where District = 2)
AND Fleet = 'District 2'
AND NOT [Speed] = 0
AND ([AssetDesc] LIKE  'Sander/Plow%' AND Input2On = 'On' AND Input1On = 'On')) 

そして、これが私がケースBのために書いたものです.

SELECT * FROM myDataTable
WHERE(TimeDate <= (select StartTime from myHoursControlTable where District = 2)
AND Fleet = 'District 2'
AND NOT [Speed] = 0
AND([AssetDesc] LIKE  'Sander/Plow%' AND Input2On = 'On' AND Input1On = 'On')) 

どちらも機能しますが、誰かがそれをまとめるのを手伝ってくれますか? case ステートメントを試してみると、「サブクエリが EXISTS で導入されていない場合、選択リストで指定できる式は 1 つだけです」というエラーが表示され続けます。また、ESRI 定義クエリでこれを行っているため、「Select *」で開始する必要があるという制限もあります。

どんな助けでも大歓迎です。

4

1 に答える 1

2

非常に迅速な考え。おそらく最も最適化されているわけではありませんが、単純に OR を使用して 2 つの WHERE ステートメントを使用してみませんか?

SELECT * FROM myDataTable
WHERE(
(
(DATEDIFF(hh, TimeDate, GETDATE()) <= (select NumberofHours from myHoursControlTable where District = 2)
AND Fleet = 'District 2'
AND NOT [Speed] = 0
AND ([AssetDesc] LIKE  'Sander/Plow%' AND Input2On = 'On' AND Input1On = 'On')) 
)
OR
(
(TimeDate <= (select StartTime from myHoursControlTable where District = 2)
AND Fleet = 'District 2'
AND NOT [Speed] = 0
AND([AssetDesc] LIKE  'Sander/Plow%' AND Input2On = 'On' AND Input1On = 'On')) 
)

アップデート

A) と B) は多くの条件を共有しているため、以下のように組み合わせることができます。これは、A) または B) のいずれかの条件を満たす行をキャッチするのが当然のことです。

SELECT * FROM myDataTable
WHERE
  (    
    DATEDIFF(hh, TimeDate, GETDATE()) <= 
    (select NumberofHours from myHoursControlTable where District = 2)
  OR 
    TimeDate <= (select StartTime from myHoursControlTable where District = 2)
  )
AND Fleet = 'District 2'
AND NOT [Speed] = 0
AND ([AssetDesc] LIKE  'Sander/Plow%' AND Input2On = 'On' AND Input1On = 'On'); 
于 2013-11-12T23:42:21.493 に答える