Гость
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Вывод последней записи по дате добавления / 15 сообщений из 15, страница 1 из 1
30.05.2019, 15:44
    #39820367
ECMAScriptNinja
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод последней записи по дате добавления
Ребят бегаю с бубном целый день и не могу все ни как сообразить.
Есть 2 таблицы "справочник абонентов" и "начисления"
В "справочнике абонента" поля: лицевой номер и ФИО
В "начисления" поля: ключ, лицевой номер,дата начисления и сумма (в данной таблице по лицевым идут начисления за несколько лет).

Условно:
лицевой 777 оплата 23.01.2018 сумма 5
лицевой 789 оплата 03.01.2018 сумма 2
лицевой 777 оплата 23.01.2019 сумма 7
лицевой 154 оплата 23.02.2018 сумма 1

Необходимо из "начисления" вычленить сумму начисления которая была по дате последняя
Например - лицевой 777 оплата 23.01.2019 сумма 7







Это запрос к тому чтобы не думали что паразит))))
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
select l.sum_isxost, b.*, s.FIO,iif(s.priz=1,'оплата по счетчику','оплата по тарифу') as VID_RASH,
iif(coalesce(l.status_pov,0)!=0,'на поверке','') as POV_abon,
iif(s.kod_geu=1002 or s.kod_geu=2001,'частный сектор','многоэтажка') as MNOGOET,
b.period_opl,iif(s.kod_gaz=1,'пр.','сж.') as VID_GAZA,
iif(coalesce(b.status_sud,0)=1,'оплата по суду','') as N_OPL_SUD,
(select k.fio_kontr from sp_kontr k where k.kod_kontr=s.kmaster) as N_UTH,
(select t.naim from spr_tu_opl t where t.id=b.tip_ustr) as N_TU,
iif(b.status_kas_ap=1,'да','нет') as OPL_KAS_AP
from bopl b
inner join spr_abon s on (s.nom_abon = b.nom_abon)
inner join licev l on (l.nom_abon = b.nom_abon)
inner join mer m on (m.nom_abon = b.nom_abon)
where b.nom_abon=s.nom_abon
and b.nom_abon=l.nom_abon
and coalesce(s.stat_arhiv,0)=0
and b.auth_metod is null
and m.sum_peni > 0
and m.sum_peni < 1000
...
Рейтинг: 0 / 0
30.05.2019, 15:46
    #39820371
ECMAScriptNinja
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод последней записи по дате добавления
На сам запрос можете не смотреть(там решения нет).... РЕШЕНИЯ Я ТАК И НЕ НАШЕЛ
...
Рейтинг: 0 / 0
30.05.2019, 15:50
    #39820373
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод последней записи по дате добавления
order by дата начисления desc rows 1
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
30.05.2019, 16:08
    #39820382
ECMAScriptNinja
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод последней записи по дате добавления
Dimitry Sibiryakovorder by дата начисления desc rows 1


Благодарю!!! Очередной раз очень мне помогли.
Пробовал через order by, но не дописал "desc rows 1"
...
Рейтинг: 0 / 0
30.05.2019, 16:08
    #39820383
KreatorXXI
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод последней записи по дате добавления
ECMAScriptNinja,

В запросе 4 таблицы. Приведи хотя бы для примера свои 2 таблицы "справочник абонентов" и "начисления". И ФБ какой?
...
Рейтинг: 0 / 0
31.05.2019, 09:14
    #39820567
ECMAScriptNinja
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод последней записи по дате добавления
Продолжение эпопеи

Вот сам запрос:
Код: 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.
execute block (date_first date = :date_first, date_last date = :date_last )
returns(peni varchar(20),nom_abon integer), FIO varchar(100))
as                             
declare variable Fine varchar(20);
declare variable Number integer;
declare variable FName varchar(200);

begin
   for select (select m.sum_peni
               from mer m
               where b.nom_abon = m.nom_abon and m.sum_peni > 0 and m.sum_peni < 1000 and m.sum_peni is not null
               order by m.date_mer desc rows 1)as pen,
   b.nom_abon, s.FIO
   from bopl b
   inner join spr_abon s on (s.nom_abon = b.nom_abon)
   where b.nom_abon=s.nom_abon
   and coalesce(s.stat_arhiv,0)=0
   and b.auth_metod is null
   and b.date_opl between :date_first and :date_last
   into :Fine, :Number, :FName
   do begin
   peni=''; nom_abon=null;FIO='';
   if(Fine is not null)then
   begin
       peni = :Fine;
       nom_abon = :Number;
       FIO = :FName;
   end
   suspend;

   end

end




И получается вот такой триппер....
Необходимо чтобы каждый лицевой номер выводился 1 раз раз(а не дублировался)
и не выводились NULL поля
....может посоветуете что-нибудь?
...
Рейтинг: 0 / 0
31.05.2019, 09:33
    #39820576
m7m
m7m
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод последней записи по дате добавления
ECMAScriptNinjaНеобходимо чтобы каждый лицевой номер выводился 1 раз раз(а не дублировался)
и не выводились NULL поля
....может посоветуете что-нибудь?

for select по лицевым
ну а внутри все что душе угодно
...
Рейтинг: 0 / 0
31.05.2019, 09:42
    #39820583
Щукина Анна
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод последней записи по дате добавления
ECMAScriptNinja,

Вот вам сборник решений вашей задачи. Добрая половина из них - будет работать и в FB
...
Рейтинг: 0 / 0
31.05.2019, 09:54
    #39820588
Щукина Анна
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод последней записи по дате добавления
ECMAScriptNinja,

решение аналогичной задачи в синтаксисе Oracle. Опять же - добрая половина будет работать и в FB.

Если сравнить варианты с двух ссылок - сразу станет понятно, какие именно варианты являются "универсальными", без привязки к синтаксису конкретной СУБД
...
Рейтинг: 0 / 0
31.05.2019, 10:04
    #39820590
ECMAScriptNinja
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод последней записи по дате добавления
Щукина Анна,
m7m ,

Благодарю большое!!!! Почти решил и нашел один момент....(при получении лицевых дублируются(абонент может несколько раз оплатить в указанный период), от сюда и выплывает дубляж в запросе)
...
Рейтинг: 0 / 0
31.05.2019, 10:09
    #39820593
Щукина Анна
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод последней записи по дате добавления
ECMAScriptNinja,

присоединяйте (JOIN) к абонентам не исходную таблицу с платежами, а предварительно агрегированные по абоненту данные. Также поступайте с начислениями, если их - больше одной по каждому абоненту
...
Рейтинг: 0 / 0
31.05.2019, 10:19
    #39820596
m7m
m7m
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод последней записи по дате добавления
ECMAScriptNinjaЩукина Анна,
m7m ,

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

Код: sql
1.
2.
3.
4.
5.
6.
for select ....
       from  spr_abon s 
     into 
do begin
   --и здесь все что надо с этим абонентом
end
...
Рейтинг: 0 / 0
31.05.2019, 11:53
    #39820666
rdb_dev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод последней записи по дате добавления
ECMAScriptNinjaНа сам запрос можете не смотреть(там решения нет).... РЕШЕНИЯ Я ТАК И НЕ НАШЕЛ Это потому, что ты забиваешь на внимательное прочтение Firebird 3.0 Reference Manual и пока не прочтёшь, так и будешь сюда за каждой ерундой долбиться.
...
Рейтинг: 0 / 0
31.05.2019, 14:43
    #39820794
ECMAScriptNinja
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод последней записи по дате добавления
rdb_dev,
FB 2.5 стоит(работаю 4 месяца)


m7m,
Да, благодарю!
...
Рейтинг: 0 / 0
31.05.2019, 14:57
    #39820801
rdb_dev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод последней записи по дате добавления
ECMAScriptNinjardb_dev,
FB 2.5 стоит(работаю 4 месяца) Firebird 2.5 Language Reference
...
Рейтинг: 0 / 0
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Вывод последней записи по дате добавления / 15 сообщений из 15, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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