2016-06-10 2 views
2

Ich versuche, die date_add-Funktion mit einem Zeitstempel in bigquery zu verwenden, aber ich bekomme 'Null' als Ergebnis der Ausgabe. Ich habe date_add erfolgreich zuvor verwendet, daher verstehe ich das Problem nicht. Hier ist ein bisschen Code.Die Verwendung der Funktion date_add mit einem Zeitstempel in bigquery führt zu null für die Ausgabe

SELECT 
userId, 
MAX(most_recent_session) most_recent_session, 
date_add(MAX(most_recent_session), 24, 'HOUR') as added_a_day, 
FROM 
(
SELECT 
userId, 
LAG(time, 0) OVER (PARTITION BY userId ORDER BY time) as most_recent_session, 
LAG(time, 1) OVER (PARTITION BY userId ORDER BY time) as previous_session, 
FROM  TABLE_DATE_RANGE(dataset.tablename_, TIMESTAMP(DATE_ADD(CURRENT_TIMESTAMP(), -30, "DAY")), CURRENT_TIMESTAMP()) 

GROUP BY 
userId, 
time 
) 
) 
group by 
userID 

Also, was ich erwarten würde, würde drei Spalten raus sein, die erste enthält userId, die zweite einen Zeitstempel für die Benutzer letzten Sitzung, und dann ein drittes mit 24 Stunden hinzugefügt, um es enthält. Aber in der dritten Spalte, anstatt den Wert in der zweiten Spalte mit 24 Stunden hinzu zu bekommen, bekomme ich 'null'.

Irgendwelche Gedanken?

Antwort

2

Ich fand die Lösung für das Problem. Sie müssen die 'most_recent_session' umbrechen, die in der äußeren Ebene des SQL mit einer USEC_TO_TIMESTAMP-Funktion existiert. Das kam mir merkwürdig vor, weil BQ das Feld als einen Zeitstempel erkannte, aber es funktioniert.

+2

Ich habe das gleiche Problem. Es sieht so aus, als ob DATE_ADD einige seltsame Probleme mit Argumenten hat. Works: DATE_ADD (CURRENT_TIMESTAMP(), 1, 'HOUR') Null: DATE_ADD (NOW(), 1, 'HOUR') Lesen der Dokumentation, die rückwärts scheint. –

Verwandte Themen