Выбор первых записей из повторяющихся
От: MASReady  
Дата: 05.12.10 16:56
Оценка:
ПАМАГИТЕ к ночи башка не варит совсем

ID — уникальный ключ
PLACE_ID — код места (может повторяться)
DOC_DATE — дата документа (может повторяться)

ТАБЛИЦА
ID PLACE_ID DOC_DATE
1 1 01.12.1990
2 1 03.02.1985
3 1 11.10.1980
4 2 07.12.1982
5 2 01.03.1980
6 2 09.07.1978
...

нужно выбрать все первые записи (не потеряв ID) для каждого PLACE_ID
Вобщем нужен ID записи с максимальной датой (только один) по каждому населенному пункту

таблица отсортирована ORDER BY PLACE_ID ASC, DOC_DATE DESC,
поэтому можно просто взять первые по каждому PLACE_ID, вопрос в том как это сделать????
Re: Выбор первых записей из повторяющихся
От: starina_bz  
Дата: 05.12.10 17:50
Оценка:
Здравствуйте, MASReady, Вы писали:

MAS>ПАМАГИТЕ к ночи башка не варит совсем


MAS>ID — уникальный ключ

MAS>PLACE_ID — код места (может повторяться)
MAS>DOC_DATE — дата документа (может повторяться)

MAS>ТАБЛИЦА

MAS>ID PLACE_ID DOC_DATE
MAS>1 1 01.12.1990
MAS>2 1 03.02.1985
MAS>3 1 11.10.1980
MAS>4 2 07.12.1982
MAS>5 2 01.03.1980
MAS>6 2 09.07.1978
MAS>...

MAS>нужно выбрать все первые записи (не потеряв ID) для каждого PLACE_ID

MAS>Вобщем нужен ID записи с максимальной датой (только один) по каждому населенному пункту

MAS>таблица отсортирована ORDER BY PLACE_ID ASC, DOC_DATE DESC,

MAS>поэтому можно просто взять первые по каждому PLACE_ID, вопрос в том как это сделать????

СУБД-то какая?
В чистом SQL выглядит так:
select id,place_id,doc_date
from my_table t
where
t.doc_date = (select max(t1.doc_date) from my_table t1 where t1.place_id = t.place_id)


В Oracleможно обойтись без подзапроса, используя аналитическую функцию FIRST.
Re[2]: Выбор первых записей из повторяющихся
От: Sergei MO Россия  
Дата: 05.12.10 20:25
Оценка:
Здравствуйте, starina_bz, Вы писали:

_>В чистом SQL выглядит так:

_>
_>select id,place_id,doc_date
_>from my_table t
_>where
_>t.doc_date = (select max(t1.doc_date) from my_table t1 where t1.place_id = t.place_id)
_>


Этот запрос может вернуть более одной записи для одного населённого пункта, если есть документы с совпадающими максимальными датами.
Нужно либо потребовать уникальности (place_id, doc_date), либо вводить дополнительные критерии для выбираемой записи.
Re: Выбор первых записей из повторяющихся
От: _FRED_ Черногория
Дата: 05.12.10 22:15
Оценка:
Здравствуйте, MASReady, Вы писали:

MAS>ID — уникальный ключ

MAS>PLACE_ID — код места (может повторяться)
MAS>DOC_DATE — дата документа (может повторяться)

MAS>нужно выбрать все первые записи (не потеряв ID) для каждого PLACE_ID

MAS>Вобщем нужен ID записи с максимальной датой (только один) по каждому населенному пункту

[MSSQL] Агрегаты FIRST и LAST
Автор: _FRED_
Дата: 15.10.10
Help will always be given at Hogwarts to those who ask for it.
Re[2]: Выбор первых записей из повторяющихся
От: MASReady  
Дата: 06.12.10 08:51
Оценка:
Здравствуйте, _FRED_, Вы писали:

_FR>Здравствуйте, MASReady, Вы писали:


MAS>>ID — уникальный ключ

MAS>>PLACE_ID — код места (может повторяться)
MAS>>DOC_DATE — дата документа (может повторяться)

MAS>>нужно выбрать все первые записи (не потеряв ID) для каждого PLACE_ID

MAS>>Вобщем нужен ID записи с максимальной датой (только один) по каждому населенному пункту

_FR>[MSSQL] Агрегаты FIRST и LAST
Автор: _FRED_
Дата: 15.10.10


у меня как раз MSSQL
не совсем понял по ссылке, если можно конкретный пример пожалста
в Books Online от MSSQL не нашел ни слова по "Агрегаты FIRST и LAST"
(только в reporting service)
Re[3]: Выбор первых записей из повторяющихся
От: _FRED_ Черногория
Дата: 06.12.10 09:36
Оценка:
Здравствуйте, MASReady, Вы писали:

MAS>>>нужно выбрать все первые записи (не потеряв ID) для каждого PLACE_ID

MAS>>>Вобщем нужен ID записи с максимальной датой (только один) по каждому населенному пункту
_FR>>[MSSQL] Агрегаты FIRST и LAST
Автор: _FRED_
Дата: 15.10.10


MAS>у меня как раз MSSQL

MAS>не совсем понял по ссылке, если можно конкретный пример пожалста
MAS>в Books Online от MSSQL не нашел ни слова по "Агрегаты FIRST и LAST"
MAS>(только в reporting service)

Не сочтите за труд, прочитайте топик. Там есть советы написать кастомный агрегат или более удачный, нежели найденный мной, пример с использованием оконных функций.
Help will always be given at Hogwarts to those who ask for it.
Re[4]: Выбор первых записей из повторяющихся
От: MASReady  
Дата: 06.12.10 11:29
Оценка:
Здравствуйте, _FRED_, Вы писали:

_FR>Здравствуйте, MASReady, Вы писали:


MAS>>>>нужно выбрать все первые записи (не потеряв ID) для каждого PLACE_ID

MAS>>>>Вобщем нужен ID записи с максимальной датой (только один) по каждому населенному пункту
_FR>>>[MSSQL] Агрегаты FIRST и LAST
Автор: _FRED_
Дата: 15.10.10


MAS>>у меня как раз MSSQL

MAS>>не совсем понял по ссылке, если можно конкретный пример пожалста
MAS>>в Books Online от MSSQL не нашел ни слова по "Агрегаты FIRST и LAST"
MAS>>(только в reporting service)

_FR>Не сочтите за труд, прочитайте топик. Там есть советы написать кастомный агрегат или более удачный, нежели найденный мной, пример с использованием оконных функций.


Дык прочитал, но там только в названии темы присутствуют FIRST и LAST а в приведенных примерах нет их
в MSDN и BOOKS ONLINE тоже ничего нет (только по report service, как я уже и писал)

они (FIRST и LAST) воообще есть в MSSQL или только в ORACLE?
Re: Выбор первых записей из повторяющихся
От: Crimzic Россия  
Дата: 06.12.10 12:01
Оценка:
Здравствуйте, MASReady, Вы писали:

MAS>ПАМАГИТЕ к ночи башка не варит совсем

MAS>ID — уникальный ключ
MAS>PLACE_ID — код места (может повторяться)
MAS>DOC_DATE — дата документа (может повторяться)
MAS>нужно выбрать все первые записи (не потеряв ID) для каждого PLACE_ID
MAS>Вобщем нужен ID записи с максимальной датой (только один) по каждому населенному пункту

Аналогичная задача часто встречается, и не раз возникала в этом форуме:

SELECT TOP 1 WITH TIES ID, PLACE_ID, DOC_DATE
FROM TheTable
ORDER BY ROW_NUMBER() OVER (PARTITION BY PLACE_ID ORDER BY DOC_DATE DESC)
Re[5]: Выбор первых записей из повторяющихся
От: _FRED_ Черногория
Дата: 06.12.10 12:31
Оценка:
Здравствуйте, MASReady, Вы писали:

MAS>Дык прочитал, но там только в названии темы присутствуют FIRST и LAST а в приведенных примерах нет их

MAS>в MSDN и BOOKS ONLINE тоже ничего нет (только по report service, как я уже и писал)

MAS>они (FIRST и LAST) воообще есть в MSSQL или только в ORACLE?


Нету, но в топике есть ответы, которые позволяют получить необходимые результаты.
Help will always be given at Hogwarts to those who ask for it.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.