2017-12-20 7 views
1

Ich weiß, der Titel ist wahrscheinlich ziemlich dumm, aber ich habe es schwer, es anders zu formulieren.BigQuery: SELECT in WHERE-Klausel mit Filter basierend auf einem Wert in der aktuellen Zeile

Ich muss BigQuery at work atm für einen Bericht verwenden. BigQuery ist mit einer Google Analytics-Ansicht von uns verknüpft. Dies gibt uns einen Datensatz mit 1 Tabelle für jeden Tag. Die Zeilen der Tabellen sind Benutzersitzungen auf unserer Website, während Spalten einige Informationen über die Sitzungen enthalten. Das Problem, das ich habe, ist das Folgende: Ich möchte Sitzungen mit Transaktionen auswählen, aber nur, wenn der Benutzer in den letzten x Tagen vor der Transaktion von einem bestimmten Referrer auf unsere Site verwiesen wurde. Ich kenne nur grundlegendes SQL und nicht irgendwelche fortgeschrittenen Konzepte. Es ist sehr frustrierend für mich, da dies bei einer .csv der Daten ein Kinderspiel mit einer geeigneten Programmiersprache wäre, aber mir fehlt das Wissen über die relevanten Konzepte in SQL.

#standardSQL 
SELECT 
    COUNT(*) 
FROM 
    `dataset.ga_sessions_2017*` 
WHERE 
    totals.transactions > 0 AND 
    fullVisitorId IN (SELECT 
         fullVisitorId 
        FROM 
         `dataset.ga_sessions_2017*` 
        WHERE 
         trafficSource.source = "xyz.com" 
        ) AND 
    < date difference thing> 

Ich könnte für den Datumsunterschied wie ich mit der trafficSource (Referrer) filtern. Das Problem für mich ist, dass, während "xyz.com" eine statische Sache ist, ich den Datumswert der aktuellen Zeile, in der ich mich befinde, referenzieren müsste. Also würde das Datum, an dem ich das 2. SELECT filtern würde, dynamisch sein von Zeile zu Zeile wechseln. Kann mir jemand sagen, wie das normalerweise gemacht wird? Das scheint eine Sache zu sein, die oft auftauchen würde.

+0

Nun, es ist schwer, das zu sagen, aber Sie besser können einige BigQuery Mentoring, da dies zu komplex ist und mehrere Konzepte benötigt für Sie zu verstehen. – Pentium10

+0

Es gibt auch viele Fälle, die hier nicht behandelt werden - innerhalb von 6 Tagen können viele Transaktionen und Überweisungen passieren. Ist Ihr Anwendungsfall eher ein Trichter mit klarem Anfang und Ende oder nur einem klaren Ende und einem bedingten Zeitrahmen? Was passiert, wenn jemand mehrere Transaktionen und Empfehlungen innerhalb von 6 Tagen hat? –

Antwort

0

Ich bin nicht vertraut mit den GA-Tabellen speziell, aber bevor etwas wildcard queries in BigQuery geschrieben zu haben, denke ich, was Sie suchen, können Spalte mit der _TABLE_SUFFIX Pseudo erfolgen:

CAST(_TABLE_SUFFIX AS INT64) >= 1217 

Wo 1217 ist das heutige Datum im MMDD-Format minus 3 Tage, unter der Annahme, dass die Tabellennamen _20171217, _20171218 usw. sind. Ansonsten können Sie einfach REPLACE verwenden, um Unterstriche zu entfernen, bevor Sie in ein int-Objekt umgewandelt werden. Es gibt auch Funktionen, die das heutige Datum generieren, wenn Sie diese Abfrage für die automatische Ausführung benötigen.

Auch ich denke, das fullVisitorId Geschäft könnte durch eine einfache WHERE trafficSource.source = "xyz.com" ersetzt werden, aber es ist schwer zu sagen, ohne in der Lage zu sein, die Abfrage selbst zu führen.

So ist die vollständige Abfrage würde wie folgt aussehen:

#standardSQL 
SELECT 
    COUNT(*) 
FROM 
    `dataset.ga_sessions_2017*` 
WHERE 
    totals.transactions > 0 AND 
    trafficSource.source = "xyz.com" AND 
    CAST(_TABLE_SUFFIX AS INT64) >= 1217 
Verwandte Themen