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

PostgreSQL, tilpasset aggregat

Du sagde i kommentarer, at en kode kan have to rækker med samme dato. Så det er fornuftige data.

01.01.2014  1   3.50
01.01.2014  1  17.25
01.01.2014  1  99.34

Der er ingen deterministisk måde at fortælle, hvilken af ​​disse rækker der er den "sidste", selvom du sorterer efter kode og "dato". (I den relationelle model - en model baseret på matematiske mængder - er rækkefølgen af ​​kolonner irrelevant, og rækkefølgen af ​​rækker er irrelevant). /P>

select *
from temp1
order by mydate, code

kan returnere dette på én gang,

01.01.2014  1   3.50
01.01.2014  1  17.25
01.01.2014  1  99.34

og dette på en anden.

01.01.2014  1   3.50
01.01.2014  1  99.34
01.01.2014  1  17.25

Medmindre du gemmer en værdi, der gør betydningen af ​​sidste indlysende, det du prøver at gøre er ikke muligt. Når folk har brug for at gøre sidste indlysende, de bruger normalt et tidsstempel.

Efter dine ændringer ser denne forespørgsel ud til at returnere det, du leder efter.

with distinct_codes as (
  select distinct code 
  from temp1
),
corrected_table as (
select 
  case when mydate <> '' then TO_TIMESTAMP(mydate, 'DD.MM.YYYY HH24:MI:SS')
       else null
  end as mydate, 
  code, 
  price
from temp1
),
max_dates as (
  select code, max(mydate) max_date
  from corrected_table
  group by code
)
select c1.mydate, d1.code, coalesce(c1.price, 0)
from corrected_table c1
inner join max_dates m1
        on m1.code = c1.code
       and m1.max_date = c1.mydate
right join distinct_codes d1
        on d1.code = c1.code
order by code;



  1. Java-Eclipse:Pakken oracle.jdbc.driver findes ikke

  2. Kan jeg pivotere datorækker til kolonner uden at skulle angive datoerne i pivoten? Oracle SQL

  3. Import af data fra JSON-fil til MySQL-database ved hjælp af java

  4. Kan ikke finde ud af, hvordan man kører en mysqli_multi_query og bruger resultaterne fra den sidste forespørgsel