Имеется таблица в которой по через имеются записи имеющие по столбцу klient_id несколько значений. например:
id klient_id data1 data2
1 1 .. ..
2 1 .. ..
3 2 .. ..
4 3 .. ..
5 3 .. ..
6 3 .. ..
нужно сгруппировать данные по столбцу klient_id оставляя самую последнюю запись из группируемых, т.е. получить:
id klient_id data1 data2
2 1 .. ..
3 2 .. ..
6 3 .. ..
Как это можно реализовать? (В Access есть агрегатные функции Last, First, если мне не изменяет память).
Здравствуйте, Genius_P, Вы писали:
G_P>Имеется таблица в которой по через имеются записи имеющие по столбцу klient_id несколько значений. например: G_P>id klient_id data1 data2 G_P>1 1 .. .. G_P>2 1 .. .. G_P>3 2 .. .. G_P>4 3 .. .. G_P>5 3 .. .. G_P>6 3 .. ..
G_P>нужно сгруппировать данные по столбцу klient_id оставляя самую последнюю запись из группируемых, т.е. получить: G_P>id klient_id data1 data2 G_P>2 1 .. .. G_P>3 2 .. .. G_P>6 3 .. ..
G_P>Как это можно реализовать? (В Access есть агрегатные функции Last, First, если мне не изменяет память).
SELECT Table1.*
FROM Table1
WHERE (ID IN
(SELECT MAX(ID) AS ID
FROM Table1
GROUP BY klient_id))
Здравствуйте, Softwarer, Вы писали:
G_P>>Как это можно реализовать? (В Access есть агрегатные функции Last, First, если мне не изменяет память).
S>А какие вопросы остаются, если есть такие функции?
Извиняюсь забыл сказть что у меня MSSQL, а в нем я таковых не нашел
Здравствуйте, Genius_P, Вы писали:
G_P>Здравствуйте, Softwarer, Вы писали:
G_P>>>Как это можно реализовать? (В Access есть агрегатные функции Last, First, если мне не изменяет память).
S>>А какие вопросы остаются, если есть такие функции? G_P>Извиняюсь забыл сказть что у меня MSSQL, а в нем я таковых не нашел
Мой пример сделан на MSSQL, Вместо First и Last можно использовать TOP 1 с вариантом Order By ID (Desc, ASC). Но нужно проанализировать оба варианта на оптимальность на конкретной БД
G_P>Извиняюсь забыл сказть что у меня MSSQL, а в нем я таковых не нашел
Хм. В MSSQL вроде бы есть подзапросы. Единственный вопрос, который следует решить — что есть последняя запись. А дальше — например, так:
select
t.*
from
test_table t,
(select client_id, max(record_date) record_date from test_table group by client_id) tt
where
t.client_id = tt.client_id and t.record_date = tt.record_date
В принципе, то же самое можно написать и в where, тогда будет работать вообще почти на любом сервере — что-нибудь типа where t.record_date = (select max(record_date...), но первый вариант, по-моему, лучше и нагляднее.