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

Сума за множество периоди от време в една заявка?

Ако приемем, че разбирам правилно заявката ви, мисля, че имате нужда от нещо в следния смисъл:

SELECT "periods"."start_date", 
       "periods"."end_date", 
       SUM(CASE WHEN "balance_transactions"."created" BETWEEN "periods"."start_date" AND "periods"."end_date" THEN "balance_transactions"."fee" ELSE 0.00 END) AS period_sum
  FROM "balance_transactions" 
  JOIN charges ON balance_transactions.source = charges.balance_id 
  JOIN ( SELECT '2013-12-20'::date as start_date, '2014-01-19'::date as end_date UNION ALL
         SELECT '2013-12-21'::date as start_date, '2014-01-20'::date as end_date UNION ALL
         SELECT '2013-12-22'::date as start_date, '2014-01-21'::date as end_date UNION ALL
         SELECT '2013-12-23'::date as start_date, '2014-01-22'::date as end_date UNION ALL
         SELECT '2013-12-24'::date as start_date, '2014-01-23'::date as end_date
         ) as periods
    ON "balance_transactions"."created" BETWEEN "periods"."start_date" AND "periods"."end_date"
 WHERE "balance_transactions"."account_id" = 6 
   AND "balance_transactions"."type" = 'charge' 
   AND "charges"."refunded" = false 
   AND "charges"."invoice" IS NOT NULL
 GROUP BY "periods"."start_date", "periods"."end_date"

Това трябва да ви върне всички периоди, които ви интересуват, в един единствен набор от резултати. Тъй като заявката се „генерира“ в движение във вашия преден край, можете да добавите толкова редове към частта с периодите, колкото искате.

Редактиране:с някои проби и грешки успях да го накарам да работи [в sqlFiddle][1] и съответно актуализирах синтаксиса по-горе.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Сравняване на хранилища за данни за PostgreSQL - MVCC срещу InnoDB

  2. Заявката на Postgres за проверка на низ е число

  3. Извършване на транзакции при изпълнение на функция postgreql

  4. Пишете във файл от RAISE NOTICE в postgresql

  5. Много заявки за SHOW TRANSACTION ISOLATION LEVEL в postgres