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

Есть такой код

select t1.account_number,t1.client_name,t1.cu_id,t2.status,t2.start_date,t2.end_date
from exchange.iptraf_user_info_2 t1
left join (select * from exchange.user_statuses_enddate where end_date < to_date('01.11.2018','dd.mm.yyyy') order by start_date desc) t2
on t1.cu_id = t2.user_id
where t1.account_number = '2000000826585'
having count(t1.account_number) = 1
group by t1.account_number,t1.client_name,t1.tariff,t1.cu_id,t2.status,t2.start_date,t2.end_date


Выводится следующее:
2000000826585 . . . 2472533 5 01.09.18 01.10.18
2000000826585 . . . 2472533 3 22.05.18 31.07.18
2000000826585 . . . 2472533 4 31.07.18 01.09.18

Вопрос: как вывести одну строку для каждого кода?

То есть в результате должно быть:
2000000826585 . . . 2472533 5 01.09.18 01.10.18
...
Рейтинг: 0 / 0
Вывести одну уникальную строку для каждого кода
    #39751166
o.makarov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
o.makarov,

Проблема в status, поскольку выводятся все возможные уникальные статусы.
Мне нужно, чтобы выводился один статус, в соответствии с сортировкой по дате
...
Рейтинг: 0 / 0
Вывести одну уникальную строку для каждого кода
    #39751168
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
o.makarov
Есть такой код



код менять можете?

.....
stax
...
Рейтинг: 0 / 0
Вывести одну уникальную строку для каждого кода
    #39751186
o.makarov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Staxo.makarovЕсть такой код



код менять можете?

.....
stax

Конечно
...
Рейтинг: 0 / 0
Вывести одну уникальную строку для каждого кода
    #39751188
o.makarov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
[quot Stax]o.makarov
код менять можете?

.....
stax

Это я написал этот код)
...
Рейтинг: 0 / 0
Вывести одну уникальную строку для каждого кода
    #39751202
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[quot o.makarov]Staxпропущено...
Это я написал этот код)

я б код переписал
напишите что надо
есть iptraf_user_info_2
...
и user_statuses_enddate
...
надо получить

зы
если делать влоб то
1) row_number() over (...) =1
2) first/last keep

.....
stax
...
Рейтинг: 0 / 0
Вывести одну уникальную строку для каждого кода
    #39751210
o.makarov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
[quot Stax]o.makarovпропущено...


я б код переписал
напишите что надо
есть iptraf_user_info_2
...
и user_statuses_enddate
...
надо получить

зы
если делать влоб то
1) row_number() over (...) =1
2) first/last keep

.....
stax

Ну смотрите, есть две таблицы:

1.iptraf_user_info_2
Из этой таблицы мне нужно поле account_number, то есть полный список уникальных аккаунтов

2.user_statuses_enddate
Из этой таблицы мне нужны поля status,start_date,end_date

Таблицы связываются iptraf_user_info_2.cu_id = user_statuses_enddate.user_id

В таблице 2 хранятся статусы, то есть один и тот же user_id может дублироваться много раз, если статусы менялись

Мне нужно получить, какой статус был у аккаунта на определённую дату

Проблема в том, что например, мне нужен последний статус с датой начала до 01.12.2018
select user_id,status,start_date,end_date from user_statuses_enddate where start_date < to_date ('01.12.2018','dd.mm.yyyy')
order by start_date desc
В итоге выведется на условный 1 user_id несколько строк со всей историей изменения статусов до 01.12.2018, а мне нужна только одна верхняя строка для каждого user_id

Потому что если я начинаю джойнить подобным образом, у меня ложиться база, поскольку к каждому account_number коннектятся все статусы до 01.12.2018

то есть account_number1 может получить, например, 100 строк, а мне нужна одна первая

То есть, если есть, допустим, 100 аккаунтов, в итоговом запросе должно вывести 100 строк с последним start_date (до 01.12.2018)

Если найдёте время разъяснить, поясняйте, пожалуйста, как недалёкому человеку, я много чего не знаю.
...
Рейтинг: 0 / 0
Вывести одну уникальную строку для каждого кода
    #39751253
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
o.makarov,

Код: 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.
WITH  iptraf_user_info_2 as (
select '2000000826585' account_number,2472533 cu_id from dual union all
select '2000000826585' account_number,2472500 cu_id from dual union all
select '2000000828888' account_number,2472888 cu_id from dual
)
,user_statuses_enddate as (
select 2472533 user_id,5 status, date '2018-09-01' start_date, date '2018-10-01' end_date from dual union all
select 2472533 user_id,5 status, date '2018-08-01' start_date, date '2018-09-01' end_date from dual union all
select 2472533 user_id,5 status, date '2018-07-01' start_date, date '2018-08-01' end_date from dual union all
select 2472533 user_id,5 status, date '2018-06-01' start_date, date '2018-07-01' end_date from dual union all
select 2472500 user_id,5 status, date '2018-01-01' start_date, date '2018-12-31' end_date from dual 
)
,tt as (
select 
  account_number
 ,cu_id
 ,user_id
 ,status
 ,start_date
 ,end_date
 ,row_number() over (partition by account_number,cu_id order by start_date desc) rn
from 
  iptraf_user_info_2 t1
 ,user_statuses_enddate t2
where 
      t1.cu_id=t2.user_id(+) 
  and start_date(+)< date '2018-08-15'
)
select * from tt where rn=1 order by account_number,cu_id
SQL> /

ACCOUNT_NUMBE      CU_ID    USER_ID     STATUS START_DA END_DATE         RN
------------- ---------- ---------- ---------- -------- -------- ----------
2000000826585    2472500    2472500          5 01.01.18 31.12.18          1
2000000826585    2472533    2472533          5 01.08.18 01.09.18          1
2000000828888    2472888                                                  1



....
stax
...
Рейтинг: 0 / 0
Вывести одну уникальную строку для каждого кода
    #39752008
o.makarov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Stax,

спасибо большое за уделённое время

Код почему-то не отрабатывает, я не совсем понимаю суть, для меня подобный код пока что сложно, но я поразбираюсь

Подскажите, а этот код, насколько я понял, выведет конкретные account_number и cu_id?
Мне просто необходимы все account_number, а их больше 100 000
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Вывести одну уникальную строку для каждого кода
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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