0

私は正常化されていない状況に追い込まれました。レポート、ドライバー、アラート、および alert_codes テーブルがあります。すべてに関係があります。ただし、ドライバー ID が入力された driver_id フィールドを使用してレポートが作成された場合、アラート コードを持つアラートのレポートが作成されるまで、後続のすべてのレポートもドライバーに関連付ける必要があります (これらのレポートの driver_id 列は入力されません)。 「フェンスの内側」に等しい名前フィールドがあります。理想的には、各レポートの driver_id フィールドにデータが入力されているとよいのですが、それは私がいる状況ではありません。

そのため、可能な限り最も効果的なクエリを作成しようとしましたが、指定された日付と、指定された月内にアラート コードに「フェンス内」の文字列が含まれるレポートとの間のレポートを取得するクエリの部分に行き詰まっています。

これは私が思いついたものですが、「演算子が存在しません:ブール値<=文字が異なります」というエラーが表示されます:

SELECT reports.* FROM reports 
INNER JOIN alerts ON alerts.report_id = reports.id 
INNER JOIN alert_codes ON alert_codes.id = alerts.code 
WHERE (reports.unit_id = 3000 AND extract(MONTH FROM reports.time) = 3 
AND extract(YEAR FROM reports.time) = 2013) 
BETWEEN reports.time = '2013-03-20 15:21:05.379941' 
AND alert_codes.name = 'Inside fence'
ORDER BY reports.time asc

その BETWEEN 句では 2 つの異なる列を使用できないことがわかります。解決策はありますか?

4

1 に答える 1

0

次のようなことができます:

SELECT reports.* FROM reports
WHERE 
reports.time >= '2013-03-20 15:21:05.379941' 
AND reports.time <= (
    SELECT min(r2.time) from reports r2 
    INNER JOIN alerts ON alerts.report_id = r2.id 
    INNER JOIN alert_codes ON alert_codes.id = alerts.code 
    WHERE r2.time >= '2013-03-20 15:21:05.379941' 
    AND alert_codes.name = 'Inside fence')

unit_id = 3000条項を除外しました。意味のある場所に配置できます (外側WHEREまたは内側のいずれかWHERE)。

于 2013-03-27T16:13:01.747 に答える