Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Прошу помощи с запросом
|
|||
|---|---|---|---|
|
#18+
Добрый день. Не могу написать запрос. Необходимо для каждого "n" получить список "Id" у которых поле "f" не равно друг другу Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2018, 22:02 |
|
||
|
Прошу помощи с запросом
|
|||
|---|---|---|---|
|
#18+
execute, что то лыжи не едут, по вашим условиям "правильный рекордсет" какой то неправильный. или я не правильно понял постановку задачи. но к примеру возьмем запись 2, 'name_2', 10 для нее список ид у которых f не равно 10 будет id: 4, 5. как у вас по три штуки то в наборе получилось? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2018, 23:46 |
|
||
|
Прошу помощи с запросом
|
|||
|---|---|---|---|
|
#18+
А если id текущий строки входит с результирующий список то почему для строки: ( 4 ,'name_2', 20 ) нет записи 'name_2', 1,2,3,5 ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2018, 23:49 |
|
||
|
Прошу помощи с запросом
|
|||
|---|---|---|---|
|
#18+
felix_ff, тут-то как раз все понятно: автору требуются все возможные полные сочетания (без перестановок) УНИКАЛЬНЫХ значений поля f в пределах группы, заданной полем n. Под "полным сочетание" тут подразумевается, что в итоговом рекодрсете длина элементов сочетания должна быть равной числу уникальных значений в f по n. Так как одно и тоже значение f может быть представлено несколькими значениями ID, возникают различные варианты сочетаний. Но все эти варианты сочетаний ID должны дать изначальную полную отсортированную последовательность уникальных f. Для name_1 в поле f есть 4 уникальных значения - 10, 20, 30, 40. Поэтому на выходе получаются "склейки" из 4-х значений. Для name_2 уникальных значений в поле f - всего три - 10, 20, NULL. Поэтому склейки будут по три значения. А вот что действительно непонятно, так это почему автор для name_3 так странно сформировал выходные группы...... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2018, 09:08 |
|
||
|
Прошу помощи с запросом
|
|||
|---|---|---|---|
|
#18+
Добрый Э - Эхfelix_ff, А вот что действительно непонятно, так это почему автор для name_3 так странно сформировал выходные группы...... Может когда 2 или более NULL(поскольку невозможно сравнить), они все уникальные. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2018, 09:36 |
|
||
|
Прошу помощи с запросом
|
|||
|---|---|---|---|
|
#18+
Добрый Э - Эх, Да, постановку вы правильно поняли. Ну NULL же неизвестное значение. Грубо говоря, два разных NULL являются уникальными значениями. Запрос тестовый, упрощен из требований корявой бизнес логики. Честно говоря, пока даже не знаю с какой стороны к нему подступиться ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2018, 09:40 |
|
||
|
Прошу помощи с запросом
|
|||
|---|---|---|---|
|
#18+
Massa52, да, именно так ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2018, 09:41 |
|
||
|
Прошу помощи с запросом
|
|||
|---|---|---|---|
|
#18+
executeЧестно говоря, пока даже не знаю с какой стороны к нему подступиться Чисто мысли. Как можно было бы решить задачу. Представь, что в каждой группе по n мы пронумеровали записи (тупо ROW_NUMBER() OVER (PARTITION BY n)) - как-то, порядок пока не важен. Далее начинаем рекурсивный CTE. К каждой записи первичного подзапроса добавляем поле (а хоть бы и CSV), где будем в некоей форме накапливать создаваемую для этой записи группу (начально там будет только номер начальной записи, а в ходе CTE туда будут добавляться следующие записи). Соответственно в рекурсивном подзапросе присоединяем к такой записи запись из основной таблицы по условиям: 1) равенство n; 2) неравенство f ни одному из уже находящихся в накопленной последовательности записей; 3) номер присоединяемой записи больше максимального номера уже накопленной последовательности. Последнее условие гарантирует прекращение рекурсии. Второе - корректно считает все NULL уникальными. По завершении рекурсии остаётся отобрать из полученной кучи записи с максимальной длиной построенного CSV-поля (для чего номера записей в группе при добавлении в CSV-список придётся форматировать с ведущими нулями). Оставшиеся CSV будут содержать требуемые итоговые наборы. Как преобразовать это в код запроса (процедуры?)... наверное, можно, но трудоёмко, и не факт что оптимально. Да и вообще в такой реализации это скорее задача для клиента, чем для сервера. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2018, 10:25 |
|
||
|
Прошу помощи с запросом
|
|||
|---|---|---|---|
|
#18+
execute, это чисто Proof of Concept, предполагающий, что в f не будет отрицательных значений (иначе в dense_rank может случиться конфуз с сортировкой, как иначе обеспечить уникальность null-ов, я не придумал), в нем нужно заменить spt_values на корректную таблицу чисел, сделать динамику в джойнах, можно избавиться от unpivot/pivot для сортировки значений в наборах, ну и т.д. - это уже вам задача. Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2018, 11:22 |
|
||
|
Прошу помощи с запросом
|
|||
|---|---|---|---|
|
#18+
если поле результата не обязательно отсортированное, то все эти мои "приседания" с xml и cross apply лишнии, и всё решаеться рекурсивным запросом (поле path2) Если нужно отсортированный, то так Код: 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. npath2resultname_1<a>1</a><a>2</a><a>3</a><a>5</a>1,2,3,5name_1<a>1</a><a>2</a><a>3</a><a>6</a>1,2,3,6name_1<a>1</a><a>2</a><a>4</a><a>5</a>1,2,4,5name_1<a>1</a><a>2</a><a>4</a><a>6</a>1,2,4,6name_1<a>1</a><a>2</a><a>7</a><a>5</a>1,2,5,7name_1<a>1</a><a>2</a><a>7</a><a>6</a>1,2,6,7name_2<a>5</a><a>1</a><a>4</a>1,4,5name_2<a>5</a><a>2</a><a>4</a>2,4,5name_2<a>5</a><a>3</a><a>4</a>3,4,5name_3<a>2</a><a>1</a>1,2name_3<a>3</a><a>1</a>1,3name_3<a>2</a><a>4</a>2,4name_3<a>3</a><a>4</a>3,4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2018, 11:27 |
|
||
|
Прошу помощи с запросом
|
|||
|---|---|---|---|
|
#18+
RANK,, вы с name_3 не так обращаетесь, как хочет автор - посмотрите комментарии выше. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2018, 11:30 |
|
||
|
Прошу помощи с запросом
|
|||
|---|---|---|---|
|
#18+
Minamoto, счас ТС скажет, что могут быть ситуации, в которых количество уникальных значений в наборе - сильно больше, чем 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2018, 11:32 |
|
||
|
Прошу помощи с запросом
|
|||
|---|---|---|---|
|
#18+
Добрый Э - ЭхMinamoto, счас ТС скажет, что могут быть ситуации, в которых количество уникальных значений в наборе - сильно больше, чем 4.Так это ясно. Я ж написал, что нужно это место на динамику переписать ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2018, 11:32 |
|
||
|
Прошу помощи с запросом
|
|||
|---|---|---|---|
|
#18+
MinamotoRANK,, вы с name_3 не так обращаетесь, как хочет автор - посмотрите комментарии выше.да, заметил Нуу вот на такой "кривой козе" можно это "объехать" :) Хотя конечно уже несовсем то ... Код: 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. npath2resultname_1<a>1</a><a>2</a><a>3</a><a>5</a>1,2,3,5name_1<a>1</a><a>2</a><a>3</a><a>6</a>1,2,3,6name_1<a>1</a><a>2</a><a>4</a><a>5</a>1,2,4,5name_1<a>1</a><a>2</a><a>4</a><a>6</a>1,2,4,6name_1<a>1</a><a>2</a><a>7</a><a>5</a>1,2,5,7name_1<a>1</a><a>2</a><a>7</a><a>6</a>1,2,6,7name_2<a>5</a><a>1</a><a>4</a>1,4,5name_2<a>5</a><a>2</a><a>4</a>2,4,5name_2<a>5</a><a>3</a><a>4</a>3,4,5name_3<a>3</a><a>2</a><a>1</a>1,2,3name_3<a>3</a><a>2</a><a>4</a>2,3,4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2018, 11:46 |
|
||
|
Прошу помощи с запросом
|
|||
|---|---|---|---|
|
#18+
вот так, имхо, будет "совсем правильно" Код: 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. npath2resultname_1<a>1</a><a>2</a><a>3</a><a>5</a>1,2,3,5name_1<a>1</a><a>2</a><a>3</a><a>6</a>1,2,3,6name_1<a>1</a><a>2</a><a>4</a><a>5</a>1,2,4,5name_1<a>1</a><a>2</a><a>4</a><a>6</a>1,2,4,6name_1<a>1</a><a>2</a><a>7</a><a>5</a>1,2,5,7name_1<a>1</a><a>2</a><a>7</a><a>6</a>1,2,6,7name_2<a>5</a><a>1</a><a>4</a>1,4,5name_2<a>5</a><a>2</a><a>4</a>2,4,5name_2<a>5</a><a>3</a><a>4</a>3,4,5name_3<a>3</a><a>2</a><a>1</a><a>4</a>1,2,3,4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2018, 13:06 |
|
||
|
|

start [/forum/topic.php?fid=46&msg=39588874&tid=1690440]: |
0ms |
get settings: |
8ms |
get forum list: |
19ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
57ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
71ms |
get tp. blocked users: |
2ms |
| others: | 261ms |
| total: | 442ms |

| 0 / 0 |
