powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Вывод последней записи по дате добавления
15 сообщений из 15, страница 1 из 1
Вывод последней записи по дате добавления
    #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
Вывод последней записи по дате добавления
    #39820371
ECMAScriptNinja
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
На сам запрос можете не смотреть(там решения нет).... РЕШЕНИЯ Я ТАК И НЕ НАШЕЛ
...
Рейтинг: 0 / 0
Вывод последней записи по дате добавления
    #39820373
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
order by дата начисления desc rows 1
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Вывод последней записи по дате добавления
    #39820382
ECMAScriptNinja
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakovorder by дата начисления desc rows 1


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

В запросе 4 таблицы. Приведи хотя бы для примера свои 2 таблицы "справочник абонентов" и "начисления". И ФБ какой?
...
Рейтинг: 0 / 0
Вывод последней записи по дате добавления
    #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
Вывод последней записи по дате добавления
    #39820576
m7m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ECMAScriptNinjaНеобходимо чтобы каждый лицевой номер выводился 1 раз раз(а не дублировался)
и не выводились NULL поля
....может посоветуете что-нибудь?

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

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

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

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

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

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

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

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


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


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