PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

PostgreSQL, персонализиран агрегат

Казахте в коментари, че един код може да има два реда с една и съща дата. Така че това са разумни данни.

01.01.2014  1   3.50
01.01.2014  1  17.25
01.01.2014  1  99.34

Няма детерминистичен начин да разберете кой от тези редове е "последният", дори ако сортирате по код и "дата". (В релационния модел - модел, базиран на математически набори - редът на колоните е без значение, а редът на редовете е без значение.) Оптимизаторът на заявките е свободен да връща редове по начина, по който смята за най-добър, така че тази заявка

select *
from temp1
order by mydate, code

може да върне това при едно изпълнение,

01.01.2014  1   3.50
01.01.2014  1  17.25
01.01.2014  1  99.34

и това на друг.

01.01.2014  1   3.50
01.01.2014  1  99.34
01.01.2014  1  17.25

Освен ако не съхранявате някаква стойност, която прави значението на последно очевидно е, че това, което се опитвате да направите, не е възможно. Когато хората трябва да издържат очевидно, те обикновено използват клеймо за време.

След вашите промени, тази заявка изглежда връща това, което търсите.

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. EXECUTE...INTO...USING изразът в PL/pgSQL не може да се изпълни в запис?

  2. Използване на корелационната функция на PostgreSQL

  3. Възможно ли е да се кондензира първичен ключ/сериен?

  4. Sequelise Eager Loading Error при включване на свързан модел

  5. PostgreSQL:В ЕДИН СИНТАКСИЧЕН ред на SQL по числова стойност, изчислена от текстова колона