Ich versuche, große Datensätze in Bezug auf Fahrzeugeinrichtung zu konsolidieren, indem Sie die Jahresdaten gruppieren. Zum Beispiel könnte eine bestimmte Artikelnummer in unserer Datenbank für einen 2012 Hyundai Elantra GLS passen. Das gleiche SKU kann passen auch das gleiche Fahrzeug, aber in den Jahren 2013, 2014 und 2015. Bei sehr kleinen Datensätzen erreicht die folgende Abfrage, was ich suche ...:Google Big Query - Verkettete Jahr Bereiche
SELECT
sku,
CASE
WHEN MIN(YEAR) = MAX(YEAR) THEN MIN(YEAR)
ELSE CONCAT(MIN(YEAR), '-', MAX(YEAR))
END AS YEAR,
make, model, submodel, notes
FROM
(SELECT @ldfnr:= IF((@old_make = tab.make
AND @old_model = tab.model
AND @old_submodel = tab.submodel
AND @old_notes = tab.notes
AND (@old_year = tab.`year`
OR @old_year = tab.`year`-1)) , @ldfnr, @ldfnr+1) AS nr, tab.* ,
@old_make := tab.make , @old_model := tab.model ,
@old_submodel := tab.submodel , @old_notes := tab.notes ,
@old_year := tab.`year`
FROM tableName AS tab,
(SELECT @ldfnr:=0, @old_model:='', @old_submodel:='', @old_notes:='', @old_year:='', @old_make:='' ) AS tmp
ORDER BY make, model, submodel, notes, `YEAR` ASC) AS mytab
GROUP BY nr
ORDER BY nr;
jedoch unsere Datensätze sind ziemlich groß. Aus diesem Grund habe ich versucht, die Daten in Google BigQuery zu laden und dort dieselbe Abfrage durchzuführen. Möglicherweise handelt es sich um eine Einschränkung von Google BigQuery, aber es wird immer ein Fehler zurückgegeben, der sich auf Zeile 9 und Spalte 2 bezieht. Hier kann die sekundäre SELECT-Abfrage gefunden werden.
Ich habe einige unserer Beispieldaten auf SQLFiddle als Referenz.
Ich schaue möglicherweise mit AWS, um dies zu beenden, aber ich dachte, ich würde es hier zuerst versuchen. Ich schätze deine Zeit. :-)
Bearbeiten Titel ...:
Unten ist, wie die Daten jetzt aussieht ...:
+------+------+-----------+-------+----------+------------------------------------------+
| SKU | Year | Make | Model | Submodel | Notes |
+------+------+-----------+-------+----------+------------------------------------------+
| 0001 | 1995 | Chevrolet | Astro | Base | Clear Lens; Chrome Housing; Pair; 1 pc.; |
| 0001 | 1995 | Chevrolet | Astro | CL | Clear Lens; Chrome Housing; Pair; 1 pc.; |
| 0001 | 1995 | Chevrolet | Astro | LS | Clear Lens; Chrome Housing; Pair; 1 pc.; |
| 0001 | 1996 | Chevrolet | Astro | Base | Clear Lens; Chrome Housing; Pair; 1 pc.; |
| 0001 | 1996 | Chevrolet | Astro | CL | Clear Lens; Chrome Housing; Pair; 1 pc.; |
| 0001 | 1996 | Chevrolet | Astro | LS | Clear Lens; Chrome Housing; Pair; 1 pc.; |
| 0001 | 1997 | Chevrolet | Astro | Base | Clear Lens; Chrome Housing; Pair; 1 pc.; |
| 0001 | 1997 | Chevrolet | Astro | LT | Clear Lens; Chrome Housing; Pair; 1 pc.; |
| 0001 | 2001 | Chevrolet | Astro | Base | Clear Lens; Chrome Housing; Pair; 1 pc.; |
+------+------+-----------+-------+----------+------------------------------------------+
Im Folgenden finden Sie die gewünschten Ergebnisse:
+------+-------------+-----------+-------+----------+------------------------------------------+
| SKU | Year | Make | Model | Submodel | Notes |
+------+-------------+-----------+-------+----------+------------------------------------------+
| 0001 | 1995 - 1997 | Chevrolet | Astro | Base | Clear Lens; Chrome Housing; Pair; 1 pc.; |
| 0001 | 1995 - 1996 | Chevrolet | Astro | CL | Clear Lens; Chrome Housing; Pair; 1 pc.; |
| 0001 | 1995 - 1996 | Chevrolet | Astro | LS | Clear Lens; Chrome Housing; Pair; 1 pc.; |
| 0001 | 1997 | Chevrolet | Astro | LT | Clear Lens; Chrome Housing; Pair; 1 pc.; |
| 0001 | 2001 | Chevrolet | Astro | Base | Clear Lens; Chrome Housing; Pair; 1 pc.; |
+------+-------------+-----------+-------+----------+------------------------------------------+
I Tut mir leid, dass ich das vorher nicht eingeschlossen habe! :-)
Bearbeiten Sie Ihre Frage und Beispieldaten * liefern und * die gewünschten Ergebnisse. Es gibt keinen Grund zu der Annahme, dass MySQL-spezifischer Code in einer anderen Datenbank ausgeführt wird, insbesondere Code, der etwas verwendet, das so maßgeschneidert ist wie Variablen. –
@GordonLinoff Danke für den Tipp! Ich wollte das natürlich mit einbeziehen, aber es ist mir völlig entfallen. Vielen Dank für Ihre Hilfe. :) –
höchstwahrscheinlich wissen Sie - aber wollte erinnern: o) - Wichtig auf SO - Sie können "akzeptierte Antwort markieren", indem Sie das Häkchen auf der linken Seite der veröffentlichten Antwort, unter der Abstimmung. Siehe http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work#5235 warum dies wichtig ist! Es ist auch wichtig, über die Antwort zu stimmen. Stimmen Sie Antworten ab, die hilfreich sind. Es gibt mehr ... Sie können überprüfen, was zu tun ist, wenn jemand Ihre Frage beantwortet - http://stackoverflow.com/help/someone-answers. –