Die Sache über LAST
von altem SQL ist, dass die Ausgabe für das Beispiel, das Sie gaben, undefiniert ist; In diesem Fall wird nicht spezifiziert, wie "last" bestimmt wird, da nicht garantiert ist, dass der Eingangstabellen-Scan eine bestimmte Reihenfolge hat. Wie geschrieben, können Sie diese gleiche Abfrage mit ANY_VALUE
von Standard-SQL in BigQuery ausdrücken, z.B .:
WITH SampleInput AS (
SELECT 1 AS id, 'apple' AS name UNION ALL
SELECT 1, 'banana' UNION ALL
SELECT 2, 'carrot' UNION ALL
SELECT 3, 'lemon' UNION ALL
SELECT 3, 'orange'
)
SELECT
id,
ANY_VALUE(name) AS last_record_of_name
FROM SampleInput
GROUP BY id;
+----+---------------------+
| id | last_record_of_name |
+----+---------------------+
| 1 | apple |
| 2 | carrot |
| 3 | lemon |
+----+---------------------+
Ich glaube nicht, dass das, was Sie nach, obwohl; wenn das Ziel, die „letzte“ Wert auf einige Kriterien, wie zum Beispiel die Sortierreihenfolge der name
Werte basieren zu bekommen, dann können Sie ARRAY_AGG
mit ORDER BY
verwenden und LIMIT 1
, zB:
WITH SampleInput AS (
SELECT 1 AS id, 'apple' AS name UNION ALL
SELECT 1, 'banana' UNION ALL
SELECT 2, 'carrot' UNION ALL
SELECT 3, 'lemon' UNION ALL
SELECT 3, 'orange'
)
SELECT
id,
ARRAY_AGG(name ORDER BY name DESC LIMIT 1)[OFFSET(0)] AS last_record_of_name
FROM SampleInput
GROUP BY id;
+----+---------------------+
| id | last_record_of_name |
+----+---------------------+
| 1 | banana |
| 2 | carrot |
| 3 | orange |
+----+---------------------+
Das Verhalten der Abfrage ist gut definiert und liefert die gewünschten Ergebnisse basierend auf Ihrer Eingabe und Ausgabe.