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

PostgreSQL, мин., макс. и брой дати в диапазона

Предвид тази таблица (както трябваше да предоставите):

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

Заявката трябва да произведе това, което описвате:

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

-> Демонстрация на SQLfiddle

CTE изискват Postgres 8.4 или по-нова версия.
Помислете за надстройка до най-новата версия на точка от 9.1, която в момента е 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. GORM създава запис, който може вече да съществува

  2. Задайте персонализирана часова зона в Django/PostgreSQL (индийско стандартно време)

  3. Грешка при инсталиране на psycopg2==2.6.2

  4. Как да прехвърля json масив към текстов масив?

  5. Проблеми със заявките за SQLite3 и Postgres/Heroku Ruby on Rails