sql >> Database teknologi >  >> RDS >> PostgreSQL

opdeling af rækker i rødforskydning

Du har ret, Redshift understøtter i øjeblikket ikke gener_series. En måde at komme uden om dette på er at generere din egen serietabel og slutte sig til den. I mit eksempel nedenfor lavede jeg lige en row_number() mod tabellen pg_attribute for at generere sekvensen. Du kan justere TOP (v) værdien for at justere nu mange tal, du ønsker i din sekvens, hvis du har brug for mere end hvad pg_attribute kan give dig, så prøv at krydse pg_attribute med sig selv. Jeg påstår ikke, at dette er den bedste måde at generere en sekvenstabel på, du kan generere den som du vil; min vigtigste pointe er, at du skal bruge en til at erstatte gener_series.

Når du først har din serietabel, er det en simpel joinforbindelse for at få dit resultat. Komplet eksempel:

-- Setup Example CREATE TABLE test ( col1 char(2), col2 char(2), col3 char(2), col4 integer ); INSERT INTO test(col1, col2, col3, col4) VALUES ('A1', 'A2', 'A3', 4), ('B1', 'B2', 'B3', 3), ('C1', 'C2', 'C3', 1); -- Generate 10 sequence numbers to table. Adjust as needed or roll your own SELECT TOP 10 ROW_NUMBER() OVER (PARTITION BY attnum ORDER BY attnum) n INTO sequence FROM pg_catalog.pg_attribute; -- Example Query SELECT col1, col2, col3, s.n FROM test t INNER JOIN sequence s ON s.n <= t.col4 ORDER BY col1, col2, col3, s.n; -- Clean up DROP TABLE sequence; DROP TABLE test;


  1. Sammenlign varchar med char

  2. slet alt fra tabellen

  3. PHP MySQL viser flere rækker grupperet efter fælles felter

  4. Kørsel af en SQL-sletteforespørgsel i Laravel