Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Интересная номерация строк запроса / 23 сообщений из 23, страница 1 из 1
30.08.2016, 14:00:56
    #39300263
KaTaFaLk
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Интересная номерация строк запроса
Приветствую
Прошу помощи в решении вопроса

Есть некое число n (допустим 5) и некая выборка порядка 1к - 10к записей.
Необходимо пронумеровать строки следующим образом:
1
2
3
4
5
5
4
3
2
1
1
2
3
...
Моих знаний для этого не хватило :(

Из последних идей:
- model но с ним я пока совсем на "вы"
- разбить всю выборку через ntil, но это пока совсем на уровне фантазии; не упел попробовать

Заранее спасибо за помощь
Слава багу!
...
Рейтинг: 0 / 0
30.08.2016, 14:11:55
    #39300276
Вячеслав Любомудров
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Интересная номерация строк запроса
Пронумеровать где ?

А так, остаток от деления на 10, плюс, если больше 5, вычитаешь его из 10, как-то так (точные циферки сам нарисуешь)...
...
Рейтинг: 0 / 0
30.08.2016, 14:15:40
    #39300282
KaTaFaLk
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Интересная номерация строк запроса
Вячеслав ЛюбомудровПронумеровать где ?
в результатах выборки/запроса

т.е. запрос должен возвращать прономерованные записи
...
Рейтинг: 0 / 0
30.08.2016, 14:41:01
    #39300318
KaTaFaLk
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Интересная номерация строк запроса
Вячеслав Любомудров,

Благодарю,
получилось вот так:
Код: plsql
1.
2.
3.
4.
5.
       Case
         When mod (rownum, 10) > 5 Then 11 - mod (rownum, 10)
         When mod (rownum, 10) = 0 Then 1
         Else mod (rownum, 10)
       End
...
Рейтинг: 0 / 0
30.08.2016, 15:01:01
    #39300333
Интересная номерация строк запроса
KaTaFaLkполучилось вот так:
Код: plsql
1.
2.
3.
4.
5.
       Case
         When mod (rownum, 10) > 5 Then 11 - mod (rownum, 10)
         When mod (rownum, 10) = 0 Then 1
         Else mod (rownum, 10)
       End



так у тебя будет 3 единицы вместо двух
...
Рейтинг: 0 / 0
30.08.2016, 16:03:16
    #39300399
andrey_anonymous
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Интересная номерация строк запроса
Код: 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 t as (select rownum ord from dual connect by level <= 20)
--------------------------------------------------------------
select ord
     , least(mod(ord-1,10)+1, 10-mod(ord-1,10)) n1
     , decode(mod(ord,10), 6,5, 7,4, 8,3, 9,2, 0,1, mod(ord,10)) n2
     , to_number(translate(mod(ord,10),'1234567890','1234554321')) n3
     , case when mod(ord-1,10) < 5 then mod(ord,10)
       else 10-mod(ord-1,10) end n4
     , abs((mod(ord+4,10)-5))+mod(ceil(ord/5.1),2) n5
from t
order by ord

ORD N1 N2 N3 N4 N5
--- -- -- -- -- --
  1  1  1  1  1  1 
  2  2  2  2  2  2 
  3  3  3  3  3  3 
  4  4  4  4  4  4 
  5  5  5  5  5  5 
  6  5  5  5  5  5 
  7  4  4  4  4  4 
  8  3  3  3  3  3 
  9  2  2  2  2  2 
 10  1  1  1  1  1 
 11  1  1  1  1  1 
 12  2  2  2  2  2 
 13  3  3  3  3  3 
 14  4  4  4  4  4 
 15  5  5  5  5  5 
 16  5  5  5  5  5 
 17  4  4  4  4  4 
 18  3  3  3  3  3 
 19  2  2  2  2  2 
 20  1  1  1  1  1 

20 rows selected
...
Рейтинг: 0 / 0
30.08.2016, 16:08:58
    #39300401
ошибся
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Интересная номерация строк запроса
элементарно, ватсонтак у тебя будет 3 единицы вместо двух
...
Рейтинг: 0 / 0
30.08.2016, 17:10:05
    #39300462
Интересная номерация строк запроса
andrey_anonymous,

а где вариант через округление синуса?
...
Рейтинг: 0 / 0
30.08.2016, 17:51:48
    #39300497
andrey_anonymous
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Интересная номерация строк запроса
фурье рядома где вариант через округление синуса?
Серый, ты - гения! (с)
Код: 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.
with t as (select rownum ord from dual connect by level <= 20)
select ord
     , dense_rank() over(order by trunc(sin(mod(ord-1,10)/9*asin(1)*2),2)) n6
from t
order by ord

ORD N6
--- --
  1  1 
  2  2 
  3  3 
  4  4 
  5  5 
  6  5 
  7  4 
  8  3 
  9  2 
 10  1 
 11  1 
 12  2 
 13  3 
 14  4 
 15  5 
 16  5 
 17  4 
 18  3 
 19  2 
 20  1 

20 rows selected
...
Рейтинг: 0 / 0
30.08.2016, 18:34:25
    #39300539
Зачем asin?
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Интересная номерация строк запроса
Код: plsql
1.
2.
3.
4.
with t as (select rownum ord from dual connect by level <= 20)
select ord, Round(sin((ord+5)/(3.14159/2)+(3.14159/3))*2.0+3.0) n6
from t
order by ord
...
Рейтинг: 0 / 0
30.08.2016, 19:36:49
    #39300591
Интересная номерация строк запроса
Зачем asin?,

и сколько ваш (3.14159/2) здц даст на 2000 строке?
...
Рейтинг: 0 / 0
31.08.2016, 01:18:29
    #39300730
Sayan Malakshinov
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Интересная номерация строк запроса
еще в копилку:
Код: plsql
1.
5.5-abs(4.5-mod(ord-1,10))
...
Рейтинг: 0 / 0
31.08.2016, 13:53:27
    #39301115
andreymx
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Интересная номерация строк запроса
andrey_anonymous
Код: 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 t as (select rownum ord from dual connect by level <= 20)
--------------------------------------------------------------
select ord
     , least(mod(ord-1,10)+1, 10-mod(ord-1,10)) n1
     , decode(mod(ord,10), 6,5, 7,4, 8,3, 9,2, 0,1, mod(ord,10)) n2
     , to_number(translate(mod(ord,10),'1234567890','1234554321')) n3
     , case when mod(ord-1,10) < 5 then mod(ord,10)
       else 10-mod(ord-1,10) end n4
     , abs((mod(ord+4,10)-5))+mod(ceil(ord/5.1),2) n5
from t
order by ord

ORD N1 N2 N3 N4 N5
--- -- -- -- -- --
  1  1  1  1  1  1 
  2  2  2  2  2  2 
  3  3  3  3  3  3 
  4  4  4  4  4  4 
  5  5  5  5  5  5 
  6  5  5  5  5  5 
  7  4  4  4  4  4 
  8  3  3  3  3  3 
  9  2  2  2  2  2 
 10  1  1  1  1  1 
 11  1  1  1  1  1 
 12  2  2  2  2  2 
 13  3  3  3  3  3 
 14  4  4  4  4  4 
 15  5  5  5  5  5 
 16  5  5  5  5  5 
 17  4  4  4  4  4 
 18  3  3  3  3  3 
 19  2  2  2  2  2 
 20  1  1  1  1  1 

20 rows selected

сколько лишнего кода
...
Рейтинг: 0 / 0
31.08.2016, 17:47:16
    #39301371
Vadim Lejnin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Интересная номерация строк запроса
xtenderеще в копилку:
Код: plsql
1.
5.5-abs(4.5-mod(ord-1,10))



шикарно! Я возился с таким решением, но чуток не допер :)
...
Рейтинг: 0 / 0
31.08.2016, 18:42:42
    #39301427
j2k
j2k
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Интересная номерация строк запроса
KaTaFaLk Есть некое число n (допустим 5)
А предложенные решения отработают если например N = 13 (в подробности алгоритмов не вдавался :) )?
...
Рейтинг: 0 / 0
31.08.2016, 19:36:35
    #39301464
Интересная номерация строк запроса
j2kKaTaFaLk Есть некое число n (допустим 5)
А предложенные решения отработают если например N = 13 (в подробности алгоритмов не вдавался :) )?

разумеется, нет: вдайся в подробность алгоритмов, вдайся!
андрей_анонимус крут! решение синусом них*я не понял, но трепещу от благолепия.
экстендер - профи с большой буквы: только у них просто, ясно и никому не пришло в голову!
андреюэмикс стоило бы предложить свой вариант, а потом уже пи__е_ь.
...
Рейтинг: 0 / 0
31.08.2016, 21:04:36
    #39301500
andreymx
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Интересная номерация строк запроса
празднующий захантенный увольняшандреюэмикс стоило бы предложить свой вариант, а потом уже пи__е_ь.уже всё предложили
остаются только варианты
Код: plsql
1.
2.
3.
4.
with t as(select rownum n from dual connect by rownum < 100)
select n,
       substr('1234554321', mod(n, 10), 1)
  from t
...
Рейтинг: 0 / 0
31.08.2016, 21:57:49
    #39301524
+ в карму
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Интересная номерация строк запроса
andreymxуже всё предложили
остаются только варианты
Код: plsql
1.
2.
3.
4.
with t as(select rownum n from dual connect by rownum < 100)
select n,
       substr('1234554321', mod(n, 10), 1)
  from t


в точку и просто
...
Рейтинг: 0 / 0
01.09.2016, 03:59:59
    #39301572
982183
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Интересная номерация строк запроса
гениально
...
Рейтинг: 0 / 0
01.09.2016, 08:01:39
    #39301619
andreymx
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Интересная номерация строк запроса
andreymxпразднующий захантенный увольняшандреюэмикс стоило бы предложить свой вариант, а потом уже пи__е_ь.уже всё предложили
остаются только варианты
Код: plsql
1.
2.
3.
4.
with t as(select rownum n from dual connect by rownum < 100)
select n,
       substr('1234554321', mod(n, 10), 1)
  from t

последняя единица была лишней
Код: plsql
1.
2.
3.
4.
with t as(select rownum n from dual connect by rownum < 100)
select n,
       substr('123455432', mod(n, 10), 1)
  from t

из-за особенностей Оракловой substr вызовы substr('12', 1, 1) и substr('12', 0, 1) выдают идентичный результат


поэтому лучше как-то так
Код: plsql
1.
2.
3.
4.
WITH T AS(SELECT ROWNUM n FROM dual connect BY ROWNUM < 100)
SELECT n,
       SUBSTR('1123455432', MOD(n, 10)+1, 1)
  FROM T
...
Рейтинг: 0 / 0
01.09.2016, 14:55:52
    #39302008
KaTaFaLk
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Интересная номерация строк запроса
О_О
спасибо всем
...
Рейтинг: 0 / 0
01.09.2016, 16:00:12
    #39302077
j2k
j2k
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Интересная номерация строк запроса
Для разных N
Код: plsql
1.
2.
3.
with t as (select rownum ord from dual connect by level <= 100)
select ord, row_number() over(partition by trunc((ord-1)/&N) order by trunc((ord-1)/&N), case when mod(trunc((ord-1)/&N),2)=1 then -ord else ord end ) a1
from t order by ord
...
Рейтинг: 0 / 0
02.09.2016, 10:19:15
    #39302504
heroin2
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Интересная номерация строк запроса
для степеней 2. n=2,4,8,16..
Код: plsql
1.
bitand(case bitand(rownum-1,4/*:n*/) when 0 then rownum-1 else -rownum end,3/*:n-1*/)+1 bb4
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Интересная номерация строк запроса / 23 сообщений из 23, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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