Nouveau ici. J'essaie d'obtenir les utilisateurs actifs quotidiens et hebdomadaires au fil du temps. ils ont 30 jours avant d'être considérés comme inactifs. Mon but est de créer des graphiques qui peuvent être divisés par user_id pour montrer les cohortes, les régions, les catégories, etc.SQL - Inégal gauche rejoindre BigQuery
J'ai créé une table de date pour obtenir tous les jours pour la période et j'ai le tableau des ordres simplifiés avec la base info dont j'ai besoin pour calculer ça.
Je suis en train de faire une jointure gauche pour obtenir le statut par jour à l'aide de la requête SQL suivante:
WITH daily_use AS (
SELECT
__key__.id as user_id
, DATE_TRUNC(date(placeOrderDate), day) as activity_date
FROM `analysis.Order`
where isBuyingGroupOrder = TRUE
and testOrder = FALSE
GROUP BY 1, 2
),
dates as (
SELECT DATE_ADD(DATE "2016-01-01", INTERVAL d.d DAY) AS date
FROM
(
SELECT ROW_NUMBER() OVER(ORDER BY __key__.id) -1 AS d
FROM `analysis.Order`
ORDER BY __key__.id
LIMIT 1096
) AS d
order by 1 desc
)
SELECT
daily_use.user_id
, wd.date as date
, MIN(DATE_DIFF(wd.date, daily_use.activity_date, DAY)) as days_since_last_action
FROM dates AS wd
LEFT JOIN daily_use
ON wd.date >= daily_use.activity_date
AND wd.date < DATE_ADD(daily_use.activity_date, INTERVAL 30 DAY)
GROUP BY 1,2
Je reçois cette erreur: LEFT OUTER JOIN ne peut pas être utilisé sans condition est une égalité des champs des deux côtés de la jointure. Dans BigQuery et se demandait comment je peux contourner cela. J'utilise Standard SQL dans BigQuery.
Merci
Copie possible de: https://stackoverflow.com/questions/43858433/bigquery-joining-on-multiple-conditions-using-subqueries-and-or-statements – phroureo
BigQuery essaiera de vous faire utiliser une condition d'égalité depuis cette n'est pas évolutif pour les grandes tables (il n'y a pas de clé commune à utiliser lorsque vous mélangez des données). Que se passe-t-il si vous utilisez CROSS JOIN avec une clause WHERE? –