MySQL - SELECT with LOOP

Tommy57

Erfahrenes Mitglied
Hallo,

ich habe in einer Tabelle zwei Spalten (start und finish) vom Typ Date. Wir wollen den Inhalt der Tabelle nun verschieben in eine andere Tabelle, wo wir nur noch eine Spalte vom Type YEAR haben. Also bräuchte ich die Daten jahresweise. Monat und Tag sind vollkommen unwichtig und das letzte Jahr bei finish soll auch verworfen werden (YEAR(finish) ist immer größer als YEAR(start)).

1, '2012-01-01', '2015-08-01'
2, '2013-06-01', '2015-05-01'
3, '2014-09-15', '2015-07-01'

1, 2012
1, 2013
1, 2014
2, 2013
2, 2014
3, 2014

Kennt jemand eine Möglcihkeit, das mit einem SELECT Statement umzusetzen?

Gruß, Tommy
 
Hi alxy,

ja, das mit dem INSERT über das SELECT war auch so geplant. Die Schwierigkeit für mich liegt darin, alle Jahre von start bis finsih zu kriegen. Oben in dem Beispiel macht er ja aus drei Zeilen sechs.

Soll heißen: Wenn zwischen start und finish 6 Jahre liegen, sollen auch 6 Zeilen daraus gemacht werden.
2000-2006 => 2000, 2001, 2002, 2003, 2004, 2005

Gruß, Tommy
 
Nee, ich habe in der Tabelle die zwei Spalten Startdatum und Enddatum. Ich möchte diese Zeile mehrfach anwählen, wie Jahre dazwischen liegen.

Code:
Die Tabelle sieht in etwa so aus.
..., item_id, startdate, enddate
..., 1, '2012-01-01', '2015-08-01'
..., 2, '2013-06-01', '2015-05-01'
..., 3, '2014-09-15', '2015-07-01'
..., 3, '2010-09-15', '2012-07-01'

Das möchte ich vom SELECT Statement bekommen:
..., item_id, year
..., 1, 2012
..., 1, 2013
..., 1, 2014
..., 2, 2013
..., 2, 2014
..., 3, 2014
..., 3, 2010
..., 3, 2011

Gruß, Tommy
 
Gibt es vllt die Möglichkeit, dass ich mehrere SELECTs mache für jedes Jahr von 1996 bis 2014 und die Ergebnisse dann mit UNION verbinde?
 
Hmm, du hast nicht erwähnt, dass du auch eine Scriptsprache einsetzen kannst. Ich ging davon aus, dass du es in reinem SQL lösen musst. Hab mich schon hingesetzt und angefangen eine Stored Procedure zu schreiben :-( Na gut, wenn du es selbst lösen konntest, hast du bestimmt auch was dabei lernen können.
 
Ohh, danke saftmeister. Das wusste ich nicht. Ich wollte es selber mit ner Stored Procedure lösen. Das wäre mir ehrlich gesagt auch lieber. Ich habe es aber nicht hingekriegt.

Wenn der Aufwand für dich bis zu Fertigstellung wirklich nicht mehr zu groß ist, würde ich mich natürlich darüber freuen und die Stored Procedure benutzen. Und der Thread kann vllt auch anderen noch helfen.
 
Ich weiß ehrlich gesagt nicht, wie hoch der Aufwand noch sein wird. Ich habe beim stöbern nur feststellen können, dass es kein triviales Problem ist. Da SQL aufgrund der LOOP- und WHILE-Schleife jedoch turing-vollständig ist, sollte es lösbar sein. Viele gefundene "Lösungen" kann ich nicht nachvollziehen, da ich keine Erfahrung mit bspw. oracle-spezifischen SQL habe. Um eine maßgeschneiderte Lösung zu finden muss man meiner Meinung nach ohnehin auf RDBMS-spezifische Funktionen zurück greifen, was die Frage aufkommen lässt, welches du genau verwendest. Mit ANSI-SQL scheint es nicht lösbar zu sein. Ich habe bisher angenommen, dass du MySQL verwendest.

Lösen würde ich es dennoch gern, da man dabei anscheinend noch ne Menge lernen kann. :)
 

Neue Beiträge

Zurück