Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Transact sql: group by
|
|||
|---|---|---|---|
|
#18+
Поделитесь, пожалуйста, опытом, кто как делает выборки следующего вида: Произвольно сформированный набор (например, join нескольких таблиц) нужно сгруппировать по некорому набору полей, для одного поля взять агрегированное значение по группе (max или min) и взять поля, которые не входят в набор из group by и соответствуют строкам, где находятся max или min значение по группе. Для понятности привожу пример: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Нужно сгруппировать по p1, для p3 взять max + соотв. p2 в данном случае нужно получить: 1,3,33 2,4,55 Мне пока на ум приходит только вот такой не очень красивый вариант: Код: plaintext 1. 2. 3. 4. 5. 6. 7. Я использую ASE 12.5, если здесь это имеет значение. Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2006, 16:06 |
|
||
|
Transact sql: group by
|
|||
|---|---|---|---|
|
#18+
Для Вашего примера надо сначала определиться с уникальными ключами в таблице или же соединять по всем полям и делать DISTINCT, если не нужны повторяющиеся значения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2006, 16:32 |
|
||
|
Transact sql: group by
|
|||
|---|---|---|---|
|
#18+
Тут предполагается, что для одного значения p1 значения p3 не повторяются, p2 - любое. #t - можно рассматривать как join из нескольких таблиц. Суть в том, что часть полей в group by, одно в агрегате, а ещё часть не там и не там. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2006, 16:57 |
|
||
|
Transact sql: group by
|
|||
|---|---|---|---|
|
#18+
Можно попытаться объединить p2 с р3, сделать max, а потом разделить (все через char), что-то типа: select p1, convert(int,substring(max(str(p2,1)+(str(p3,2))),1,1)), convert(int,substring(max(str(p2,1)+str(p3,2)),2,2)) --,p3 from #t group by p1 go Mожет длину при конвертировании подинамичнее вычислять тоже. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2006, 19:10 |
|
||
|
Transact sql: group by
|
|||
|---|---|---|---|
|
#18+
Sorry, перепутал p2 c p3, должно быть: select p1, convert(int,substring(max(str(p3,2)+(str(p2,1))),3,1)), convert(int,substring(max(str(p3,2)+str(p2,1)),1,2)) from #t group by p1 go ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2006, 19:19 |
|
||
|
|

start [/forum/topic.php?fid=55&msg=33535381&tid=2013082]: |
0ms |
get settings: |
8ms |
get forum list: |
17ms |
check forum access: |
5ms |
check topic access: |
5ms |
track hit: |
47ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
43ms |
get tp. blocked users: |
1ms |
| others: | 214ms |
| total: | 352ms |

| 0 / 0 |
