нужно выбрать все первые записи (не потеряв ID) для каждого PLACE_ID
Вобщем нужен ID записи с максимальной датой (только один) по каждому населенному пункту
таблица отсортирована ORDER BY PLACE_ID ASC, DOC_DATE DESC,
поэтому можно просто взять первые по каждому PLACE_ID, вопрос в том как это сделать????
Здравствуйте, 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.
Здравствуйте, 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), либо вводить дополнительные критерии для выбираемой записи.
Здравствуйте, MASReady, Вы писали:
MAS>ID — уникальный ключ MAS>PLACE_ID — код места (может повторяться) MAS>DOC_DATE — дата документа (может повторяться)
MAS>нужно выбрать все первые записи (не потеряв ID) для каждого PLACE_ID MAS>Вобщем нужен ID записи с максимальной датой (только один) по каждому населенному пункту
Здравствуйте, _FRED_, Вы писали:
_FR>Здравствуйте, MASReady, Вы писали:
MAS>>ID — уникальный ключ MAS>>PLACE_ID — код места (может повторяться) MAS>>DOC_DATE — дата документа (может повторяться)
MAS>>нужно выбрать все первые записи (не потеряв ID) для каждого PLACE_ID MAS>>Вобщем нужен ID записи с максимальной датой (только один) по каждому населенному пункту
_FR>[MSSQL] Агрегаты FIRST и LAST
у меня как раз MSSQL
не совсем понял по ссылке, если можно конкретный пример пожалста
в Books Online от MSSQL не нашел ни слова по "Агрегаты FIRST и LAST"
(только в reporting service)
Здравствуйте, MASReady, Вы писали:
MAS>>>нужно выбрать все первые записи (не потеряв ID) для каждого PLACE_ID MAS>>>Вобщем нужен ID записи с максимальной датой (только один) по каждому населенному пункту _FR>>[MSSQL] Агрегаты FIRST и LAST
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.
Здравствуйте, _FRED_, Вы писали:
_FR>Здравствуйте, MASReady, Вы писали:
MAS>>>>нужно выбрать все первые записи (не потеряв ID) для каждого PLACE_ID MAS>>>>Вобщем нужен ID записи с максимальной датой (только один) по каждому населенному пункту _FR>>>[MSSQL] Агрегаты FIRST и LAST
MAS>>у меня как раз MSSQL MAS>>не совсем понял по ссылке, если можно конкретный пример пожалста MAS>>в Books Online от MSSQL не нашел ни слова по "Агрегаты FIRST и LAST" MAS>>(только в reporting service)
_FR>Не сочтите за труд, прочитайте топик. Там есть советы написать кастомный агрегат или более удачный, нежели найденный мной, пример с использованием оконных функций.
Дык прочитал, но там только в названии темы присутствуют FIRST и LAST а в приведенных примерах нет их
в MSDN и BOOKS ONLINE тоже ничего нет (только по report service, как я уже и писал)
они (FIRST и LAST) воообще есть в MSSQL или только в ORACLE?
Здравствуйте, 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)
Здравствуйте, 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.