Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Помогите написать запрос
|
|||
|---|---|---|---|
|
#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. 41. 42. Для каждой строки этого набора данных необходимо определить принадлежность к группе следующим образом, покажу на готовом тестовом результате, на примере формирования первой группы: (на рисунке) Сначала группируем все данные поля «Vol», рассмотрим значение «3292», это значение одно, поэтому обвел в синий прямоугольник. Для него значение поля «ElementID» равно «1577889», для нас это первый элемент группы (поле GroupID). Далее ищем вхождение этого значения для «ElementID» у других групп, это справа синими линиями. Это значение для поля «ElementID» повторяется для групп со значениями поля «Vol»: «82408» и «398372». Далее, для значения «398372» поля «Vol» получаем новые элементы «4804318» и «5031244», которые также добавляются в текущую группу (поле «GroupID»). Далее все по такому же принципу. Мне видится решение данного запроса в виде рекурсии, но возможно есть решение и без нее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.10.2018, 16:29 |
|
||
|
Помогите написать запрос
|
|||
|---|---|---|---|
|
#18+
rsolanov, Попробую понять. Есть уникальные elementID, есть уникальные vol. Нужно для каждого elementID взять все уникальные vol и ... Дальше мысль теряется. Чего с ними делать. Почему groupid определено в таблице, но описано иначе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.10.2018, 19:44 |
|
||
|
Помогите написать запрос
|
|||
|---|---|---|---|
|
#18+
PizzaPizzaЕсть уникальные elementID, есть уникальные vol. Нужно для каждого elementID взять все уникальные vol и ... Дальше мысль теряется. Чего с ними делать. Почему groupid определено в таблице, но описано иначе. ничего подобного там не написано. а то, что написано, совпадает с нарисованным. попробую переформулировать, а ТС пусть подтверждает/опровергает: Vol это типа аэропорт, перевалочный пункт. ElementID это типа рейсы. берем первый попавшийся аэропорт, берем все его рейсы, ищем, в какие аэропорты они летают. далее из найденных аэропортов ищем другие, в которые можно попасть из найденных на данном шаге. итого в одной группе оказываются все аэропорты, соединенные какими-то рейсами (хотя бы и с тучей пересадок) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.10.2018, 20:34 |
|
||
|
Помогите написать запрос
|
|||
|---|---|---|---|
|
#18+
Короче,обычный лес - ну то есть куча деревьев в одном флаконе одной таблице. Единственная трудность - не "помечены" корни - но их несложно найти по отсутствию обратной ссылки. В общем, тривиальный такой рекурсивный WITH. Одно неясно - а в какой форме требуется результат всего этого шаманства? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.10.2018, 21:15 |
|
||
|
Помогите написать запрос
|
|||
|---|---|---|---|
|
#18+
Yasha123, Это тогда какой то обход графа. Но группы groupid тут я не понял все равно: такое впечатление, что они условны и как раз требуется их переопределить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.10.2018, 21:19 |
|
||
|
Помогите написать запрос
|
|||
|---|---|---|---|
|
#18+
Yasha123PizzaPizzaЕсть уникальные elementID, есть уникальные vol. Нужно для каждого elementID взять все уникальные vol и ... Дальше мысль теряется. Чего с ними делать. Почему groupid определено в таблице, но описано иначе. ничего подобного там не написано. а то, что написано, совпадает с нарисованным. попробую переформулировать, а ТС пусть подтверждает/опровергает: Vol это типа аэропорт, перевалочный пункт. ElementID это типа рейсы. берем первый попавшийся аэропорт, берем все его рейсы, ищем, в какие аэропорты они летают. далее из найденных аэропортов ищем другие, в которые можно попасть из найденных на данном шаге. итого в одной группе оказываются все аэропорты, соединенные какими-то рейсами (хотя бы и с тучей пересадок)Да, вы совершенно правильно меня поняли! ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.10.2018, 10:40 |
|
||
|
Помогите написать запрос
|
|||
|---|---|---|---|
|
#18+
PizzaPizzaYasha123, Это тогда какой то обход графа. Но группы groupid тут я не понял все равно: такое впечатление, что они условны и как раз требуется их переопределить.На входе у нас только два поля: Код: sql 1. 2. 3. Соответственно необходимо найти их объединения по принципу, указанному в задаче. Результатом этого объединения является поле "GroupID" как указано в примере чтобы лучше понять что требуется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.10.2018, 10:43 |
|
||
|
Помогите написать запрос
|
|||
|---|---|---|---|
|
#18+
rsolanov, 21707988 решает вашу задачу - см. Solution 4: Unfolding connected nodes with deletion of processed edges чуть подпилить нужно будет разница в том что он берет за № группьі найменьший елемент в ней. во внешнем цикле прикрутить нумерацию начиная с 1. на вьіходе получите все id в одном поле и с № группьі в другом. аутпут джоините с исходньім набором по любому из полей - Vol, ElementID ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.10.2018, 11:44 |
|
||
|
Помогите написать запрос
|
|||
|---|---|---|---|
|
#18+
Была подобная задача, по группировке пользователей по IP. Надо поискать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.10.2018, 12:09 |
|
||
|
Помогите написать запрос
|
|||
|---|---|---|---|
|
#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. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. Но если данных и групп будет намного больше, то чтобы их найти придется делать несколько раз t1 и затем t2. Если найти условие выхода из "цикла"(кол-ва повторений t1 и t2) возможно получится реализовать это решение в виде циклов while или через рекурсию ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.10.2018, 12:27 |
|
||
|
Помогите написать запрос
|
|||
|---|---|---|---|
|
#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. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. При количестве элементов около 500к штук выделяет около 150к групп за 3 минуты. На мой взгляд вполне приемлемый результат, позже можно будет разобраться в 4-м варианте запроса по статье которую предложил _human. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.10.2018, 12:43 |
|
||
|
Помогите написать запрос
|
|||
|---|---|---|---|
|
#18+
Добрый день. Прошу помочь с запросом. после вот такого запроса: select vh.* from blank_blaisd_isdv_pbig as v join blank_blaisd_isdvh_pbig as vh on vh.isd_vh_bnr = v.isd_v_bnr where substr(v.isd_v_ueberschrift,1,2) = 'ÄH' and v.isd_v_cflag = 'N' and v.isd_v_reisedat between curdate() and curdate() +interval 28 day and v.isd_v_reisedat >= '2018-11-01' получаю вот такую таблицу: когда в столбике isd_vh_agent есть 'PK' то в столбике isd_vh_hotel следующая строка не должна содержать 'LXR%' ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2018, 12:01 |
|
||
|
Помогите написать запрос
|
|||
|---|---|---|---|
|
#18+
GG-gabbianobetween curdate() and curdate() +interval 28 dayВам в какой-то другой форум надо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2018, 14:35 |
|
||
|
Помогите написать запрос
|
|||
|---|---|---|---|
|
#18+
iap, можно и без этой строчки , но намека про другой форум не понял , простите ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2018, 15:45 |
|
||
|
Помогите написать запрос
|
|||
|---|---|---|---|
|
#18+
Модератор: GG-gabbiano, это не намек. Зачем вы задаете вопрос в ветке по MSSQL (да еще и в чужоv топике), если у вас какая-то другая СУБД? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2018, 15:47 |
|
||
|
Помогите написать запрос
|
|||
|---|---|---|---|
|
#18+
GG-gabbianoiap, можно и без этой строчки , но намека про другой форум не понял , проститеВ T-SQL нет функции curdate() и нет синтаксиса interval 28 day. Отсутствует так же функция substr(). Несмотря на это, - "получаю вот такую таблицу". Значит сервер-то у вас не MS SQL ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2018, 15:51 |
|
||
|
|

start [/forum/topic.php?fid=46&msg=39719844&tid=1688904]: |
0ms |
get settings: |
5ms |
get forum list: |
11ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
50ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
48ms |
get tp. blocked users: |
1ms |
| others: | 218ms |
| total: | 348ms |

| 0 / 0 |
