2016-08-15 8 views
1

テーブルtb2のDateTimeがtb1のMinDateTime以上で、tb2のDateTimeがテーブルtb1のMaxDateTimeより小さいレコードを選択しようとしています。Google Bigクエリの関係演算子を使用して日付を比較

私はエラー「エラー:ON句のテーブル名が付いすべてのフィールド名と、各テーブルから1フィールド名の=の比較でなければなりません。」取得しています私は許されないのですかわからない

をこのような日付をクエリで比較します。ミハイルのノートに拡大すること

SELECT 
* 
FROM (
    SELECT 
     c.Id2 AS Id, 
     d.DateTime AS DateTime, 
     c.Latitude AS Latitude, 
     c.Longitude AS Longitude 
    FROM (
      SELECT 
       Id1,MAX(DateTime) AS MaxDatetime, 
       MIN(DateTime) AS MinDateTime 
      FROM [tb1] 
      GROUP BY VehicleId) AS d 
    INNER JOIN (
     SELECT 
       Latitude, Longitude, Id2, DateTime 
       FROM [tb2]) AS c 
ON 
    d.Id1 = c.Id2 
    AND c.DateTime >= d.MinDateTime 
    AND c.DateTime < d.MaxDateTime) 
+0

実行それを - https://cloud.google .com/bigquery/sql-reference/enabling-standard-sql –

答えて

1

BigQueryのレガシーSQL条件は、単純な等式ある加入する必要があります。 (「表示オプション」の下に「使用レガシーSQLを」オフ)standard SQLを使用すると、あなたの代わりにバッククォート`とテーブル名をエスケープするだけの小さな調整でクエリを実行することができるはずです、何かのように:

SELECT 
* 
FROM (
    SELECT 
     c.Id2 AS Id, 
     d.DateTime AS DateTime, 
     c.Latitude AS Latitude, 
     c.Longitude AS Longitude 
    FROM (
      SELECT 
       Id1,MAX(DateTime) AS MaxDatetime, 
       MIN(DateTime) AS MinDateTime 
      FROM `tb1` 
      GROUP BY VehicleId) AS d 
    INNER JOIN (
     SELECT 
       Latitude, Longitude, Id2, DateTime 
       FROM `tb2`) AS c 
ON 
    d.Id1 = c.Id2 
    AND c.DateTime >= d.MinDateTime 
    AND c.DateTime < d.MaxDateTime); 

あなたの場合例えば、あなたが別のフィルタとして参加するための非等価条件を表現する必要があります、レガシーSQLを使用してクエリを実行したいん:BigQueryの標準SQLで

SELECT 
* 
FROM (
    SELECT 
     c.Id2 AS Id, 
     d.DateTime AS DateTime, 
     c.Latitude AS Latitude, 
     c.Longitude AS Longitude 
    FROM (
      SELECT 
       Id1,MAX(DateTime) AS MaxDatetime, 
       MIN(DateTime) AS MinDateTime 
      FROM [tb1] 
      GROUP BY VehicleId) AS d 
    INNER JOIN (
     SELECT 
       Latitude, Longitude, Id2, DateTime 
       FROM [tb2]) AS c 
ON 
    d.Id1 = c.Id2 
WHERE 
    c.DateTime >= d.MinDateTime 
    AND c.DateTime < d.MaxDateTime)