Ankündigung

Einklappen
Keine Ankündigung bisher.

GELÖST: Ältester Timestamp innerhalb der neusten 1'000 Datensätze

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • GELÖST: Ältester Timestamp innerhalb der neusten 1'000 Datensätze

    Hi,

    Ich brauche wieder einmal eure Hilfe

    Ich habe ein MySQL Table mit folgender Struktur erstellt:

    Code:
    CREATE TABLE rp_celebs (
    
         id MEDIUMINT NOT NULL AUTO_INCREMENT,
    
         rp_names CHAR(30) NOT NULL,
    
         rp_timestamp DECIMAL NOT NULL,
    
         PRIMARY KEY (id)
    
     );
    Das Table hat mittlerweile ein paar 10'000 Datensätze. Ich habe versucht mit einem SQL Query herausfinden, was den der älteste UX Timestamp (rp_timestamp) der neusten/aktuellsten 1'000 Einträge ist. Ich dachte, dass sei einfach damit erledigt:

    Code:
    "SELECT MIN(rp_timestamp) FROM `rp_celebs` ORDER BY `rp_celebs`.`id` DESC LIMIT 1000"
    Dat war nix.. Mit diesem Command erhalte ich den tiefsten Timestamp des gesamten Tables, also des ersten Eintrags und nicht nur der letzten 1000 Einträge.

    Kann mir da jemand auf die Sprünge helfen?

    Danke
    Gamoraline

  • #2
    Du must zuerst einmal die letzten N Datensätze holen und dann darauf dein min() anwenden. Via CTE:

    Code:
    postgres=# create table gamoraline(id int generated always as identity primary key, ts timestamp);
    CREATE TABLE
    postgres=# insert into gamoraline (ts) select '2000-01-01'::timestamp + random()*100000*'1 day'::interval from generate_series(1,10000) s;
    INSERT 0 10000
    postgres=# select min(ts), max(ts) from gamoraline;
                min             |            max             
    ----------------------------+----------------------------
     2000-01-01 01:11:39.505626 | 2273-10-12 18:49:16.363194
    (1 row)
    
    postgres=# with tmp as (select * from gamoraline order by id desc limit 100) select min(ts), max(ts) from tmp;
                min             |            max             
    ----------------------------+----------------------------
     2004-05-22 14:08:44.331519 | 2273-04-24 10:05:08.902712
    (1 row)
    
    postgres=#
    PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

    Kommentar


    • #3
      Oder in MySQL:
      Code:
      SELECT MIN(x.stamp) FROM (SELECT c.rp_timestamp as stamp FROM rp_celebs c ORDER BY c.id DESC LIMIT 1000) as x;
      Und ab MySQL 8:
      Code:
      WITH cte AS (SELECT c.rp_timestamp as stamp FROM rp_celebs c ORDER BY c.id DESC LIMIT 1000) SELECT MIN(cte.stamp) FROM cte;

      Kommentar


      • #4
        Hi,

        Ich fühl' mich immer etwas schlecht, wenn ich so schnell Antwort bekomme.. Trotzdem: Vielen lieben Dank

        Hier für andere Dummerchen die Codezeile für meinen Usecase:

        Code:
        WITH rp_temp AS (SELECT rp_timestamp FROM `rp_celebs` ORDER BY id DESC LIMIT 1000) SELECT MIN(rp_timestamp) FROM rp_temp;

        Kommentar

        Lädt...
        X