2016-08-15 5 views
1

Ich versuche, die Datensätze auszuwählen, deren DateTime in Tabelle tb2 größer als oder gleich MinDateTime von tb1 ist und deren DateTime von tb2 weniger MaxDateTime von Tabelle tb1 ist.Vergleichen Sie Daten mit relationalen Operatoren in Google große Abfrage

ich die Fehlermeldung „Error.: ON-Klausel muss mit Tabellennamen mit dem Präfix aller Feldnamen aus jeder Tabelle, und von = Vergleichen von einem Feldnamen sein“ getting

Nicht sicher, ob ich darf nicht zu Vergleichen Sie Daten wie diese in der Abfrage.

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

laufen sie in BigQuery Standard-SQL - https://cloud.google .com/bigquery/sql-Referenz/Aktivieren-Standard-SQL –

Antwort

1

Um auf Mikhail Anmerkung zu erweitern:

BigQuery Vermächtnis SQL erfordert, dass die Bedingungen sind einfach Gleichheiten verbinden. Mit standard SQL (deaktivieren Sie „Use Legacy-SQL“ unter „Optionen einblenden“) sollten Sie die Tabellennamen mit Backticks zu entkommen ` stattdessen die Abfrage mit nur einer kleinen Anpassung ausführen können, so etwas wie:

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); 

Wenn Sie Sie mögen die Abfrage mit Legacy-SQL auszuführen, müssen Sie die nicht-Gleichheitsbedingungen für die Verbindung als separater Filter zum Ausdruck bringen, zB:

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) 
Verwandte Themen