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

PostgreSQL, min, maks, dan hitungan tanggal dalam rentang

Diberikan tabel ini (seperti yang seharusnya Anda berikan):

CREATE TEMP TABLE tbl (
   id        int PRIMARY KEY
  ,mydatetxt text
 );

INSERT INTO tbl VALUES
  (1, '01.02.2011')
 ,(2, '05.01.2011')
 ,(3, '06.03.2012')
 ,(4, '07.08.2011')
 ,(5, '04.03.2013')
 ,(6, '06.08.2011')
 ,(7, '')             -- empty string
 ,(8, '02.02.2013')
 ,(9, '04.06.2010')
 ,(10, '10.10.2012')
 ,(11, '04.04.2012')
 ,(12, NULL)          -- NULL
 ,(13, '04.03.2013'); -- min date a 2nd time

Kueri harus menghasilkan apa yang Anda gambarkan:

WITH base AS (
   SELECT to_date(mydatetxt, 'DD.MM.YYYY') AS the_date
   FROM   tbl
   WHERE  mydatetxt <> ''  -- excludes NULL and ''
   )
SELECT min(the_date) AS dmin
      ,max(the_date) AS dmax
      ,count(*) AS ct_incl
      ,(SELECT count(*)
        FROM   base b1
        WHERE  b1.the_date < max(b.the_date)
        AND    b1.the_date > min(b.the_date)
       ) AS ct_excl
FROM   base b

-> Demo SQLfiddle

CTE memerlukan Postgres 8.4 atau yang lebih baru.
Pertimbangkan untuk meningkatkan versi ke rilis poin terbaru dari 9.1, yang saat ini 9.1.9 .




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Ambil beberapa baris dengan kueri menggunakan AND dan OR

  2. pertanyaan postgresql nextval tentang urutan

  3. Beberapa koneksi database di Rails

  4. Cara menginstal pustaka klien PostgreSQL untuk PHP di Windows dengan SSL diaktifkan

  5. Kesalahan sintaks pada atau di dekat pengguna saat menambahkan batasan Postgres