powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Требуется помощь в решении задачки
5 сообщений из 5, страница 1 из 1
Требуется помощь в решении задачки
    #39187721
okuznetsov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Задание:


Существует таблица платежей Pays

paysdate | Дата платежа
summ | Сумма платежа

В одну дату может не быть платежа, может быть один или несколько платежей. Необходимо вернуть сумму платежей на каждую дату за период (месяц). Если на какую-то дату нет платежей, вывести в поле «summ» null.

Пример результата за три дня:

Исходные данные:

paysdate | summ
05.03.13 | 15000
05.03.13 | 10000
07.03.13 | 31400

Результат должен быть таким, т.е. запрос должен выдавать следующую выборку:

paysdate | summ

05.03.13 | 25000
06.03.13 | null
07.03.13 |31400



Предполагаю, что можно это реализовать на хранимой процедуре или курсорах, одним запросом вряд ли получится решить.

Меня хватило только на это:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
SELECT 
"Pays".paysdate, "sum"("Pays".summ)
FROM 
"public"."Pays"
WHERE 
"Pays".paysdate >= '01-03-2013' and "Pays".paysdate < '01-04-2013'
GROUP BY
"Pays".paysdate
ORDER BY
"Pays".paysdate ASC



дальше сообразить не получается (не знаю как вставить в выборку -> 06.03.13 | null) , требуется ваша помощь. С хранимыми процедурами, курсорами, тригерами никогда ранее не приходилось работать.
...
Рейтинг: 0 / 0
Требуется помощь в решении задачки
    #39187840
Lonepsycho
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
okuznetsov,

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
WITH d AS (
  SELECT CAST(generate_series('01-03-2013'::timestamp, '01-04-2013'::timestamp, '1 day'::interval) AS DATE) AS day
)
SELECT
  d.day,
  t.s
FROM
d LEFT JOIN (
SELECT 
"Pays".paysdate, "sum"("Pays".summ) AS s
FROM 
"public"."Pays"
INNER JOIN
d
ON "Pays".paysdate = d.day
GROUP BY
d.day, "Pays".paysdate
ORDER BY
"Pays".paysdate ASC) AS t
ON d.day = t."paysdate"



пробуйте. может не сделал много ошибок, и работать будет...
...
Рейтинг: 0 / 0
Требуется помощь в решении задачки
    #39187841
Lonepsycho
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
okuznetsov,

P.S. предполагалось что "Pays".paysdate у вас типа DATE.
...
Рейтинг: 0 / 0
Требуется помощь в решении задачки
    #39190069
Author the new one
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
okuznetsov,

Сгенерируйте последовательность дат (см. функцию generate_series) и от нее outer join к сгруппированным pays
...
Рейтинг: 0 / 0
Требуется помощь в решении задачки
    #39192161
okuznetsov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Большое спасибо, благодарен за помощь.
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Требуется помощь в решении задачки
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]