|
Тема |
за коя база? [re: dzver] |
|
Автор |
Dakota (erotoman) |
|
Публикувано | 24.08.05 21:04 |
|
|
Не разбрах за коя СУБД ти трябва решение.
Eто как може да стане за PostgreSQL:
kouber=# select * from A;
a_id | b_id | c
------+------+----
1 | 1 | 1
2 | 1 | 3
3 | 2 | 2
4 | 3 | 6
5 | 3 | 7
6 | 3 | 8
7 | 3 | -1
8 | 1 | 3
9 | 3 | 8
10 | 2 | 10
(10 rows)
В случая за b_id=1 и b_id=3 имаш по две максимални стойности:
- за b_id=1, c=3 при a_id=2 и a_id=8;
- за b_id=3, ц=8 при a_id=6 и a_id=9.
Което значи, че трябва да решиш тази двусмисленост, като подредиш и по a_id:
kouber=# select distinct on (b_id) * from A order by b_id, c desc, a_id;
a_id | b_id | c
------+------+----
2 | 1 | 3
10 | 2 | 10
6 | 3 | 8
(3 rows)
kouber=# select distinct on (b_id) * from A order by b_id, c desc, a_id desc;
a_id | b_id | c
------+------+----
8 | 1 | 3
10 | 2 | 10
9 | 3 | 8
(3 rows)
Клаузата DISTINCT ON не е стандартна, а е разширение на PostgreSQL, но същият ефект можеш да получиш и с една допълнителна подзаявка или с някакви GROUP BY хватки.
Всъщност опитай и така: select a_id, b_id, max(c) from A group by b_id;, но поне в PostgreSQL не ти дава, точно заради по-горната двусмисленост.
Everything louder than everything else...Редактирано от Dakota на 24.08.05 21:12.
|
| |
|
|
|