Datums-Aufzählung

cs3838

Benutzer
Beiträge
9
Hi liebe Leute ..

Ich möchte das meine Abfrage iterativ das anfangsdatum und das enddatum um ein Monat erhöht. könnt ihr mir bitte helfen?

Mein Code:

SELECT user.id AS id, user.businessName AS businessName, user.createdOn AS createdOn, DATE_ADD(createdOn, INTERVAL 0 DAY) AS Anfang ,DATE_ADD(createdOn, INTERVAL 1 Month) AS Ende
FROM qrsjetty.user u
WHERE u.id = 119

Danke im vorraus ihr seid die besten..
 
Werbung:
Hi liebe Leute ..

Ich möchte das meine Abfrage iterativ das anfangsdatum und das enddatum um ein Monat erhöht. könnt ihr mir bitte helfen?

Mein Code:

SELECT user.id AS id, user.businessName AS businessName, user.createdOn AS createdOn, DATE_ADD(createdOn, INTERVAL 0 DAY) AS Anfang ,DATE_ADD(createdOn, INTERVAL 1 Month) AS Ende
FROM qrsjetty.user u
WHERE u.id = 119

Danke im vorraus ihr seid die besten..

Was genau willst Du? Funktioniert Dein SQL nicht?
 
So sieht es momentan aus. Ich möchte aber iterativ das anfangsdatum/enddatum immer um einen Monat erhöhen
 

Anhänge

  • test.jpg
    test.jpg
    16,6 KB · Aufrufe: 6
So sieht es momentan aus. Ich möchte aber iterativ das anfangsdatum/enddatum immer um einen Monat erhöhen

Wie jetzt? Du willst da noch mehr Spalten dranklatschen für 2,3,4 Monate? Dann mach das, pinsele das fein in das SQL. Es gibt in SQL keinen (direkten) Weg, so mal eben schnell 500 Spalten zu generieren - mit Zeilen würde es gehen.
 
ich möchte ja auch keine spalten, sondern Zeilen. Als nächste Zeile sollte dann der nächste Abrechnungszeitraum stehen . verstehst?
 
ich möchte ja auch keine spalten, sondern Zeilen. Als nächste Zeile sollte dann der nächste Abrechnungszeitraum stehen . verstehst?

Also ungefähr so:

Code:
test=# create table mitarbeiter (id int primary key, name text);  CREATE TABLE
test=*# insert into mitarbeiter values (1, 'max');  INSERT 0 1
test=*# insert into mitarbeiter values (2, 'lisa');  INSERT 0 1
test=*# select id, name, ('2014-07-01'::date + s * ('1 month'::interval))::date as start, ('2014-07-01'::date + s+1 * '1 month'::interval)::date as ende from mitarbeiter cross join generate_series(0,11) s order by id, start;
 id | name |  start  |  ende
----+------+------------+------------
  1 | max  | 2014-07-01 | 2014-08-01
  1 | max  | 2014-08-01 | 2014-08-02
  1 | max  | 2014-09-01 | 2014-08-03
  1 | max  | 2014-10-01 | 2014-08-04
  1 | max  | 2014-11-01 | 2014-08-05
  1 | max  | 2014-12-01 | 2014-08-06
  1 | max  | 2015-01-01 | 2014-08-07
  1 | max  | 2015-02-01 | 2014-08-08
  1 | max  | 2015-03-01 | 2014-08-09
  1 | max  | 2015-04-01 | 2014-08-10
  1 | max  | 2015-05-01 | 2014-08-11
  1 | max  | 2015-06-01 | 2014-08-12
  2 | lisa | 2014-07-01 | 2014-08-01
  2 | lisa | 2014-08-01 | 2014-08-02
  2 | lisa | 2014-09-01 | 2014-08-03
  2 | lisa | 2014-10-01 | 2014-08-04
  2 | lisa | 2014-11-01 | 2014-08-05
  2 | lisa | 2014-12-01 | 2014-08-06
  2 | lisa | 2015-01-01 | 2014-08-07
  2 | lisa | 2015-02-01 | 2014-08-08
  2 | lisa | 2015-03-01 | 2014-08-09
  2 | lisa | 2015-04-01 | 2014-08-10
  2 | lisa | 2015-05-01 | 2014-08-11
  2 | lisa | 2015-06-01 | 2014-08-12
(24 rows)

Ich verwende PostgreSQL, MySQL kennt kein generate_series(). Wie soooo vieles nicht. Es gibt Würgarounds, google kennt sie alle.
 
Also ungefähr so:

Da war ein fehler. Punkrechnung geht vor Strichrechnung. Will man das anders, helfen Klammern. Also so:

Code:
select id, name, ('2014-07-01'::date + s * ('1 month'::interval))::date as start, ('2014-07-01'::date + (s+1) * ('1 month'::interval))::date as ende from mitarbeiter cross join generate_series(0,11) s order by id, start;
 
Ich krieg da ne Fehlermeldung :

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '::date + s * ('1 month'::interval))::date as start, ('2014-07-01'::date + (s+1) ' at line 1
 
Werbung:
Zurück
Oben