Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Аналог top при группировке
|
|||
|---|---|---|---|
|
#18+
Такая задача: Есть таблица контактов (CONTACT), в ней есть поле ID клиента и поле номера его телефона - BRIEF (текстовое). Каждый клиент может иметь сколько угодно телефонов, но в конечную выгрузку должно попасть максимум 5 телефонов. Вопрос, как это сделать без курсора? Если бы top можно было использовать внутри group by, то это бы подошло, но он так не работает ;( Если использовать HAVING, то получим только тех у кого не более 5 телефонов ;( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2007, 12:46 |
|
||
|
Аналог top при группировке
|
|||
|---|---|---|---|
|
#18+
Используй нумератор внутри группы. Ты не указал версию и тип сервера. Могу предложить вариант с аналитическими (оконными) функциями. Код: plaintext 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2007, 13:05 |
|
||
|
Аналог top при группировке
|
|||
|---|---|---|---|
|
#18+
Извиняюсь ASE 12.5.3 здесь нет row_number() ;(( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2007, 14:48 |
|
||
|
Аналог top при группировке
|
|||
|---|---|---|---|
|
#18+
Есть такой "фокус", который строится на том, что при insert во временную таблицу с identity запросом с order by, мы не получаем ни "дырок" в identity, и сортировка по identity даёт сортировку, которая использовалась при insert. Код: plaintext 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2007, 16:11 |
|
||
|
Аналог top при группировке
|
|||
|---|---|---|---|
|
#18+
москитЕсть такой "фокус", который строится на том, что при insert во временную таблицу с identity запросом с order by, мы не получаем ни "дырок" в identity, и сортировка по identity даёт сортировку, которая использовалась при insert. Код: plaintext 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. Очень красивое решение! Сначала подумал, что неверное, но потом осознал всю хитрость этого + 2 ;) Спасибо огромное, сделаю так. Конечно же, интересно было бы придумать решение без временной таблицы, но это уже чисто спортивный интерес и мне даже кажется, что в данном случае нереализуемый. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2007, 17:25 |
|
||
|
Аналог top при группировке
|
|||
|---|---|---|---|
|
#18+
BepcycКонечно же, интересно было бы придумать решение без временной таблицы, но это уже чисто спортивный интерес и мне даже кажется, что в данном случае нереализуемый.А что его придумывать? Решение давным давно было придумано. И существует два метода его построения: 1) self-join таблицы с последующей группировкой, 2) коррелированный скалярный подзапрос во фразе SELECT + derived-table. Одно НО - оба варианта достаточно накладные для сервера. Вот тебе пара примеров. Обрати внимание на столбец RN - по сути, это есть сквозной нумератор телефонов в пределах одного ID. Для каждого абонента этот столбец будет нумеровать телефоны от единицы и до тех пор, пока телефоны не закончатся. На примере тестовых данных от москита: IDPHONE10121123145617892585311132223333 1) Вариант № 1 - self-join + group by: Код: plaintext 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. 2) Вариант №2 - коррелированный скалярный подзапрос во фразе SELECT + derived-table: Код: plaintext 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2007, 05:52 |
|
||
|
|

start [/forum/topic.php?fid=55&fpage=59&tid=2011884]: |
0ms |
get settings: |
5ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
31ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
37ms |
get tp. blocked users: |
1ms |
| others: | 215ms |
| total: | 322ms |

| 0 / 0 |
