PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Przypisz całkowitą wartość miesiąca do każdego dnia miesiąca

dema:db<>skrzypce

SELECT
    s1.sales_date,
    s1.country,
    s1.sales_volume,
    s2.fix_costs
FROM sales s1
JOIN sales s2 ON s1.country <> 'None' AND s2.country = 'None' 
    AND date_trunc('month', s1.sales_date) = date_trunc('month', s2.sales_date)

Potrzebujesz naturalnego łączenia się. Warunki przyłączenia to:

  1. Pierwszy stół bez None rekordy (s1.country <> 'None' )
  2. Druga tabela tylko None rekordy (s2.country = 'None' )
  3. Data:uwzględnij tylko część roku i miesiąca, ignoruj ​​dni. Można to osiągnąć normalizując daty obu tabel do pierwszego dnia miesiąca za pomocą date_trunc() . Tak więc m.in. '2020-02-15' wyniki w '2020-02-01' i '2020-02-29' wyniki w '2020-02-01' również, co działa dobrze jako porównanie i warunek dołączenia.

Alternatywnie :

SELECT
    *
FROM (
    SELECT
        sales_date,
        country,
        sales_volume,
        SUM(fix_costs) OVER (PARTITION BY date_trunc('month', sales_date)) as fix_costs
    FROM sales 
) s
WHERE country <> 'None'

Możesz użyć SUM() funkcja okna nad grupą date_trunc() jak opisano powyżej. Następnie musisz filtrować None zapisy później



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. nie można połączyć się z instancją postgres AWS RDS z pgadmin4

  2. Utwórz tabelę Postgresql z Avro Schema w Nifi

  3. Wstaw nowy element w kolumnie JSONB na podstawie wartości innego pola - postgres

  4. Optymalizacja wielu złączeń

  5. Przełączanie awaryjne i powrót po awarii dla PostgreSQL na Microsoft Azure