Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

Datums-Aufzählung

Dieses Thema im Forum "MySQL und MariaDB" wurde erstellt von cs3838, 26 Juni 2014.

  1. cs3838

    cs3838 Benutzer

    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..
     
  2. akretschmer

    akretschmer Datenbank-Guru

    Was genau willst Du? Funktioniert Dein SQL nicht?
     
  3. cs3838

    cs3838 Benutzer

    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
      Dateigröße:
      16,6 KB
      Aufrufe:
      6
  4. akretschmer

    akretschmer Datenbank-Guru

    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.
     
  5. cs3838

    cs3838 Benutzer

    ich möchte ja auch keine spalten, sondern Zeilen. Als nächste Zeile sollte dann der nächste Abrechnungszeitraum stehen . verstehst?
     
  6. akretschmer

    akretschmer Datenbank-Guru

    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.
     
  7. akretschmer

    akretschmer Datenbank-Guru

    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;
    
     
  8. cs3838

    cs3838 Benutzer

    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
     
  9. akretschmer

    akretschmer Datenbank-Guru

    Ja, wie erwartet.
     
  10. cs3838

    cs3838 Benutzer

    bringt mich irgendwie nicht weiter
     
  11. akretschmer

    akretschmer Datenbank-Guru

    Ich schrieb ja, daß ich PostgreSQL verwende und MySQL vieles nicht kann, so auch das generate_series(), welches mir eine Hilfstabelle aufbaut, mit der ich einen Cross Join mache. Damit hast einklich auch schon den Weg, den Du gehen mußt.
     
  12. cs3838

    cs3838 Benutzer

    ok. ich danke dir sehr akretschmer:) ich werde es packen :)
     
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden