sql >> Databáze >  >> RDS >> PostgreSQL

rozdělení řádků v Redshift

Máte pravdu, Redshift v současné době nepodporuje generation_series. Jedním ze způsobů, jak to obejít, je vygenerovat si vlastní tabulku řad a připojit se k ní. V mém příkladu níže jsem právě provedl row_number() proti tabulce pg_attribute, abych vygeneroval sekvenci. Hodnotu TOP (v) můžete upravit tak, abyste nyní ve své sekvenci upravili mnoho čísel, která chcete, pokud potřebujete více, než vám může poskytnout pg_attribute, zkuste spojit pg_attribute sám se sebou. Netvrdím, že je to nejlepší způsob generování tabulky sekvencí, můžete ji vygenerovat, jak chcete; mým hlavním bodem je, že budete potřebovat jeden, který nahradígener_series.

Jakmile budete mít svou tabulku sérií, můžete se jednoduše spojit a získat výsledek. Kompletní příklad:

-- 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. Jak ověřit datum RRRRMMDD uvedené jako parametr PL/SQL

  2. Metoda hledání mezer v datech časových řad v MySQL?

  3. Nepodporovaná možnost poskytnutá mysql_options()

  4. Jak vložit více řádků na základě dotazu?