PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

PostgreSQL, Agregat khusus

Anda mengatakan dalam komentar bahwa satu kode dapat memiliki dua baris dengan tanggal yang sama. Jadi ini adalah data yang masuk akal.

01.01.2014  1   3.50
01.01.2014  1  17.25
01.01.2014  1  99.34

Tidak ada cara deterministik untuk mengetahui baris mana yang "terakhir", bahkan jika Anda mengurutkan berdasarkan kode dan "tanggal". (Dalam model relasional--model berdasarkan himpunan matematika--urutan kolom tidak relevan, dan urutan baris tidak relevan.) Pengoptimal kueri bebas mengembalikan baris adalah cara yang dianggap terbaik, jadi kueri ini

select *
from temp1
order by mydate, code

mungkin mengembalikan ini dalam sekali jalan,

01.01.2014  1   3.50
01.01.2014  1  17.25
01.01.2014  1  99.34

dan ini di tempat lain.

01.01.2014  1   3.50
01.01.2014  1  99.34
01.01.2014  1  17.25

Kecuali Anda menyimpan beberapa nilai yang membuat arti terakhir jelas, apa yang Anda coba lakukan tidak mungkin. Saat orang perlu membuat terakhir jelas, mereka biasanya menggunakan stempel waktu.

Setelah perubahan Anda, kueri ini tampaknya mengembalikan apa yang Anda cari.

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. Bagaimana cara mengubah waktu tanggal menjadi nilai zaman unix di Postgres?

  2. Bergabunglah dengan kueri hitungan di generate_series() dan ambil nilai Null sebagai '0'

  3. PostgreSQL:cara terbaik untuk menggabungkan subset kecil dari tabel besar

  4. Kumpulan koneksi Jboss AS7 tidak akan terhubung kembali

  5. Panggil getNextException untuk melihat penyebabnya:Cara membuat Hibernate / JPA menampilkan pesan server DB untuk pengecualian