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

Tildel den samlede værdi af måneden til hver dag i måneden

demoer:db<>fiddle

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)

Du har brug for en naturlig selvtilslutning. Tilmeldingsbetingelser er:

  1. Første tabel uden None poster (s1.country <> 'None' )
  2. Den anden tabel kun None poster (s2.country = 'None' )
  3. Dato:Tag kun år og måned i betragtning, ignorer dage. Dette kan opnås ved at normalisere datoerne for begge tabeller til den første i måneden ved at bruge date_trunc() . Så f.eks. '2020-02-15' resulterer i '2020-02-01' og '2020-02-29' resulterer i '2020-02-01' også, hvilket fungerer godt som sammenligning og sammenføjningstilstand.

Alternativt :

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'

Du kan bruge SUM() vinduesfunktion over gruppen date_trunc() som beskrevet ovenfor. Så skal du filtrere None optegnelser bagefter



  1. Udfør alembic-opgradering i flere skemaer

  2. hvordan opdaterer man et eller flere felter og ignorerer de tomme felter i mysql-databasen?

  3. Kalder MySQL Stored Procedure på PHP

  4. Java+Tomcat, døende databaseforbindelse?