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

WHILE LOOP mit SELECT TIMERANGE

Dieses Thema im Forum "Oracle" wurde erstellt von killer22, 28 März 2017.

  1. killer22

    killer22 Neuer Benutzer

    Hallo zusammen,

    bin seit paar Tagen an einem Problem dran evtl. könnt ihr mir weiterhelfen. (google und alle andere Suchen ergaben leider nicht die richtige oder für mich verständliche Lösung)


    Mein System Oracle Server Version: 10g

    So nun zu meinem Problem ich habe eine Tabelle, die eine Spalte mit einem Zeitstempel im UNIX Format beinhaltet.

    Konvertiert sieht die Ausgabe so aus.

    DATUM
    03/07/2017 06:45:30
    03/07/2017 06:51:38
    03/07/2017 07:08:46
    03/07/2017 07:13:23
    03/07/2017 07:26:30
    03/07/2017 09:30:48
    03/07/2017 09:31:45
    03/07/2017 09:31:51
    03/07/2017 11:33:57
    03/07/2017 11:36:03
    03/07/2017 11:38:08
    03/07/2017 12:38:15
    03/07/2017 12:39:11
    03/07/2017 13:42:19
    03/07/2017 13:42:26

    Ich brauche die Summen (COUNT) aus einem Zeitbereich der vorlaufend Rolliert z.B.

    Startzeit: 06:00 Uhr
    Zeitbereich 10 Minuten

    Meine gewünschte Ausgabe (wobei die … für Nullsetze stehen habe sie nicht Aufgeführt um den Beitrag nicht zu lang zu machen)


    TIME COUNT
    06:00 0
    06:10 0
    06:20 0
    06:30 0
    06:40 1
    06:50 1
    07:00 1
    07:10 1
    07:20 1

    09:30 2

    11:30 3

    12:30 2

    13:40 2


    Im Prinzip muss ich eine Schleife und die Select Abfrage bauen und der Abfrage bei jedem Loop 300 Sekunden dazu addieren.

    Ich danke schon mal im Vorraus!
     
  2. akretschmer

    akretschmer Datenbank-Guru

    Schleifen in Abfragen sind bäh.

    Code:
    test=*# select * from ts_werte ;
      ts   
    ----------------------------
     2017-03-28 18:20:54.702932
     2017-03-28 19:23:50.232868
     2017-03-28 23:25:29.1195
     2017-03-28 20:07:18.722951
     2017-03-28 23:09:46.905271
     2017-03-29 02:29:51.672855
     2017-03-29 00:07:06.978682
     2017-03-29 00:11:23.191953
     2017-03-29 07:21:14.592615
     2017-03-29 07:21:10.908652
     2017-03-28 18:20:56.526003
     2017-03-28 20:17:40.667368
     2017-03-28 22:47:53.347353
     2017-03-29 01:24:02.963262
     2017-03-29 05:02:45.853804
     2017-03-29 00:28:32.329728
     2017-03-29 01:44:24.354053
     2017-03-28 20:39:39.200283
     2017-03-28 19:59:40.854459
     2017-03-28 18:35:09.097553
     2017-03-28 18:21:10.036166
     2017-03-28 19:21:54.21033
     2017-03-28 20:30:06.499356
     2017-03-28 21:41:29.586484
     2017-03-29 04:29:24.304409
     2017-03-28 20:50:07.099584
     2017-03-29 01:50:56.179609
     2017-03-29 08:43:19.375118
     2017-03-29 13:55:09.444096
     2017-03-29 07:26:28.891374
    (30 Zeilen)
    
    test=*# select foo.time, count(1) from (select '2017-03-28 18:00:))'::timestamp + s * '15minutes'::interval as time from generate_series(1, 40) s(s)) foo left join ts_werte w on w.ts between foo.time and foo.time+'15minutes'::interval group by foo.time order by foo.time
    ;
      time  | count
    ---------------------+-------
     2017-03-28 18:15:00 |  3
     2017-03-28 18:30:00 |  1
     2017-03-28 18:45:00 |  1
     2017-03-28 19:00:00 |  1
     2017-03-28 19:15:00 |  2
     2017-03-28 19:30:00 |  1
     2017-03-28 19:45:00 |  1
     2017-03-28 20:00:00 |  1
     2017-03-28 20:15:00 |  1
     2017-03-28 20:30:00 |  2
     2017-03-28 20:45:00 |  1
     2017-03-28 21:00:00 |  1
     2017-03-28 21:15:00 |  1
     2017-03-28 21:30:00 |  1
     2017-03-28 21:45:00 |  1
     2017-03-28 22:00:00 |  1
     2017-03-28 22:15:00 |  1
     2017-03-28 22:30:00 |  1
     2017-03-28 22:45:00 |  1
     2017-03-28 23:00:00 |  1
     2017-03-28 23:15:00 |  1
     2017-03-28 23:30:00 |  1
     2017-03-28 23:45:00 |  1
     2017-03-29 00:00:00 |  2
     2017-03-29 00:15:00 |  1
     2017-03-29 00:30:00 |  1
     2017-03-29 00:45:00 |  1
     2017-03-29 01:00:00 |  1
     2017-03-29 01:15:00 |  1
     2017-03-29 01:30:00 |  1
     2017-03-29 01:45:00 |  1
     2017-03-29 02:00:00 |  1
     2017-03-29 02:15:00 |  1
     2017-03-29 02:30:00 |  1
     2017-03-29 02:45:00 |  1
     2017-03-29 03:00:00 |  1
     2017-03-29 03:15:00 |  1
     2017-03-29 03:30:00 |  1
     2017-03-29 03:45:00 |  1
     2017-03-29 04:00:00 |  1
    (40 Zeilen)
    
    
    
    habs nicht nachgeprüft, bin aber optimistisch ...
     
  3. killer22

    killer22 Neuer Benutzer

    Hi,
    danke für deine Antwort leider kann ich nicht viel damit anfangen. Kannst du mir die Funktion genau erläutern?

    Code:
    select foo.time, count(1)                                                                        // verstehe ich
    from (select '2017-03-28 18:00:))'::timestamp + s * '15minutes'::interval as time                // verstehe ich nicht
    from generate_series(1, 40) s(s)) foo left join ts_werte w on w.ts                              // verstehe ich nicht hier müsste eingetlich meine select Abfrage  in die from rein aber wo
    between foo.time and foo.time+'15minutes'::interval                                            // verstehe ich nicht
    group by foo.time order by foo.time                                                            // verstehe ich
    
     
    Zuletzt bearbeitet: 29 März 2017
  4. akretschmer

    akretschmer Datenbank-Guru

    ich erzeuge 'on-the-fly' mit generate_series() eine Tabelle

    Code:
    test=# select '2017-03-28 18:00:))'::timestamp + s * '15minutes'::interval as time from generate_series(1, 40) s(s);
      time   
    ---------------------
     2017-03-28 18:15:00
     2017-03-28 18:30:00
     2017-03-28 18:45:00
     2017-03-28 19:00:00
     2017-03-28 19:15:00
     2017-03-28 19:30:00
     2017-03-28 19:45:00
     2017-03-28 20:00:00
     2017-03-28 20:15:00
     2017-03-28 20:30:00
     2017-03-28 20:45:00
     2017-03-28 21:00:00
     2017-03-28 21:15:00
     2017-03-28 21:30:00
     2017-03-28 21:45:00
     2017-03-28 22:00:00
     2017-03-28 22:15:00
     2017-03-28 22:30:00
     2017-03-28 22:45:00
     2017-03-28 23:00:00
     2017-03-28 23:15:00
     2017-03-28 23:30:00
     2017-03-28 23:45:00
     2017-03-29 00:00:00
     2017-03-29 00:15:00
     2017-03-29 00:30:00
     2017-03-29 00:45:00
     2017-03-29 01:00:00
     2017-03-29 01:15:00
     2017-03-29 01:30:00
     2017-03-29 01:45:00
     2017-03-29 02:00:00
     2017-03-29 02:15:00
     2017-03-29 02:30:00
     2017-03-29 02:45:00
     2017-03-29 03:00:00
     2017-03-29 03:15:00
     2017-03-29 03:30:00
     2017-03-29 03:45:00
     2017-03-29 04:00:00
    (40 Zeilen)
    
    Deine Daten-Tabelle joine ich dann dagegen.
     
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