powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Вопрос по запросу.
6 сообщений из 6, страница 1 из 1
Вопрос по запросу.
    #38607905
r901
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день.

Есть запрос:


Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
select
p.id,
cast(c.change_date as date) d1,
(case  when (select first 1 m.curr_id from money_accounts m where m.id=c.macc_id)=1 then
(macc.amount - (select sum(dpower(-1, c1.direct)*c1.amount) from carries c1, type_payments tp1 where c1.macc_id=c.macc_id and c1.change_date>=c.change_date and tp1.id = c1.type_id and c1.status_comiss=tp1.is_commission))
else
(
(macc.amount - (select sum(
(dpower(-1, c1.direct)*c1.amount)

) from carries c1, type_payments tp1 where c1.macc_id=c.macc_id and c1.change_date>=c.change_date and tp1.id = c1.type_id and c1.status_comiss=tp1.is_commission))
)
end
) incoming,
(
case  when (select first 1 m.curr_id from money_accounts m where m.id=c.macc_id)=1 then
(case c.direct when 2 then c.amount else 0 end)
end
)
kredit,
(
case  when (select first 1 m.curr_id from money_accounts m where m.id=c.macc_id)=1 then
(case c.direct when 1 then c.amount else 0 end)
else
(case c.direct when 1 then c.amount else 0 end)
end
)
debet,
c.id id1
from
  money_accounts macc, type_payments tp,clients c1,personal_accounts p,carries c
where macc.id = c.macc_id and tp.id = c.type_id and macc.pacc_id=p.id and p.client_id=c1.id
and c.status_comiss=tp.is_commission
and macc.curr_id=1 and macc.cd=3
order by
c.macc_id
,c.change_date,c.id




Он возвращает:
Код: plsql
1.
2.
3.
4.
5.
id d1 incoming kredit debet id1
3454 31.05.2013 0 1392388,71 0 8461 
3454 31.05.2013 1392388,71 0 1392388,71 8471
3454 25.07.2013 0 9500000 0 8483
3454 25.07.2013 9500000 0 9500000 8484 


............

Не подскажете как выбрать записи для каждого дня с максимальным id1,
т.е, чтобы получилось:
Код: plsql
1.
2.
3.
id d1 incoming kredit debet id1
3454 31.05.2013 1392388,71 0 1392388,71 8471
3454 25.07.2013 9500000 0 9500000 8484 


.........
или подсчитать конечный остаток(incoming+ kredit-debet) на каждый день,
т.е, чтобы получилось:
Код: plsql
1.
2.
3.
id d1 outcoming 
3454 31.05.2013 0 
3454 25.07.2013 0 


.......
...
Рейтинг: 0 / 0
Вопрос по запросу.
    #38607913
Фотография roadster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
r901,

у вас оракел или фаербирд?
...
Рейтинг: 0 / 0
Вопрос по запросу.
    #38607950
r901
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
фаербирд у меня
...
Рейтинг: 0 / 0
Вопрос по запросу.
    #38607983
WildSery
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В неявных соединениях даже разбираться не хочется.
Пропагандирую явные соединения!
...
Рейтинг: 0 / 0
Вопрос по запросу.
    #38607988
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
r901,

автор
Код: sql
1.
2.
3.
4.
      WHEN (SELECT FIRST 1
                M.CURR_ID
            FROM MONEY_ACCOUNTS M
            WHERE M.ID = C.MACC_ID) = 1



first без order by может быть весьма непредсказуем

в запрос не вникал, но по второму варианту приблизительно так

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
WITH T AS (
SELECT
    P.ID AS ID,
    C.MACC_ID AS MACC_ID,
    CAST(C.CHANGE_DATE AS DATE) AS D1,
    (
    CASE
      WHEN (SELECT FIRST 1
                M.CURR_ID
            FROM MONEY_ACCOUNTS M
            WHERE M.ID = C.MACC_ID) = 1
      THEN (MACC.AMOUNT - (SELECT
                               SUM(DPOWER(-1, C1.DIRECT) * C1.AMOUNT)
                           FROM CARRIES C1, TYPE_PAYMENTS TP1
                           WHERE C1.MACC_ID = C.MACC_ID AND
                                 C1.CHANGE_DATE >= C.CHANGE_DATE AND
                                 TP1.ID = C1.TYPE_ID AND
                                 C1.STATUS_COMISS = TP1.IS_COMMISSION))
      ELSE ((MACC.AMOUNT - (SELECT
                                SUM((DPOWER(-1, C1.DIRECT) * C1.AMOUNT)

                                )
                            FROM CARRIES C1, TYPE_PAYMENTS TP1
                            WHERE C1.MACC_ID = C.MACC_ID AND
                                  C1.CHANGE_DATE >= C.CHANGE_DATE AND
                                  TP1.ID = C1.TYPE_ID AND
                                  C1.STATUS_COMISS = TP1.IS_COMMISSION)))
    END) AS INCOMING,
    (
    CASE
      WHEN (SELECT FIRST 1
                M.CURR_ID
            FROM MONEY_ACCOUNTS M
            WHERE M.ID = C.MACC_ID) = 1
      THEN (CASE
              WHEN C.DIRECT = 2
              THEN C.AMOUNT
              ELSE 0
            END)
    END) AS KREDIT,
    (
    CASE
      WHEN (SELECT FIRST 1
                M.CURR_ID
            FROM MONEY_ACCOUNTS M
            WHERE M.ID = C.MACC_ID) = 1
      THEN (CASE C.DIRECT
              WHEN 1
              THEN C.AMOUNT
              ELSE 0
            END)
      ELSE (CASE C.DIRECT
              WHEN 1
              THEN C.AMOUNT
              ELSE 0
            END)
    END) AS DEBET,
    C.ID AS ID1
FROM
  CARRIES C
  JOIN MONEY_ACCOUNTS MACC ON MACC.ID = C.MACC_ID
  JOIN TYPE_PAYMENTS TP ON TP.ID = C.TYPE_ID AND C.STATUS_COMISS = TP.IS_COMMISSION
  JOIN PERSONAL_ACCOUNTS P ON MACC.PACC_ID = P.ID
  JOIN CLIENTS C1 ON P.CLIENT_ID = C1.ID
WHERE
      MACC.CURR_ID = 1 AND
      MACC.CD = 3)
SELECT ID,
       D1,
       SUM(INCOMING + KREDIT - DEBET) AS OUTCOMING
FROM T
GROUP BY ID, D1
--ORDER BY C.MACC_ID, C.CHANGE_DATE, C.ID
...
Рейтинг: 0 / 0
Вопрос по запросу.
    #38608303
r901
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот тот большой запрос не подошёл неправильно посчитал остаток на конец дня , а по первому варианту, что-то непонятно как сделать нужно.
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Вопрос по запросу.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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