powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как выбрать записи с максимальными значениями одной колонки?
37 сообщений из 37, показаны все 2 страниц
Как выбрать записи с максимальными значениями одной колонки?
    #35728057
Term2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Требуется выбрать из таблицы некоторые записи, но только те, у которых значение некоторой колонки максимальное. То есть мне надо такое условие добавить. Подскажите как это можно сделать?
...
Рейтинг: 0 / 0
Как выбрать записи с максимальными значениями одной колонки?
    #35728059
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
where колонка = (select max(колонка) from та же таблица)
...
Рейтинг: 0 / 0
Как выбрать записи с максимальными значениями одной колонки?
    #35728099
iap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
SELECT TOP  1  WITH TIES *
FROM [Таблица]
ORDER BY [Колонка] DESC;
...
Рейтинг: 0 / 0
Как выбрать записи с максимальными значениями одной колонки?
    #35728104
Term2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
что-то запрос уходит надолго в себя и зависает
...
Рейтинг: 0 / 0
Как выбрать записи с максимальными значениями одной колонки?
    #35728107
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Term2что-то запрос уходит надолго в себя и зависаетКакой?
...
Рейтинг: 0 / 0
Как выбрать записи с максимальными значениями одной колонки?
    #35728114
Term2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Гавриленко Сергей АлексеевичTerm2что-то запрос уходит надолго в себя и зависаетКакой?

where колонка = (select max(колонка) from та же таблица)
...
Рейтинг: 0 / 0
Как выбрать записи с максимальными значениями одной колонки?
    #35728125
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Term2Гавриленко Сергей АлексеевичTerm2что-то запрос уходит надолго в себя и зависаетКакой?

where колонка = (select max(колонка) from та же таблица)Прям вот такой вот запрос работать вовсе не будет.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Как выбрать записи с максимальными значениями одной колонки?
    #36682342
Wizet
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
совсем расширенный вариант:

select id,value,max(s_value) from table1 group by id

Выбирает для каждого ID значение value у которого значение s_value максимально, например выбрать максимальные суммы заказов и имена для каждого работника за год будет так:
select id,name,max(zakaz_price) where year=2009 from table1 group by id

на выходе будет id - имя сотрудника - максимальная стоимость заказа за 2009 год

П.С. Пример придуманный - понятно что хранить имена сотрудников в таблице заказов глупо =)
П.П.С. Тему нашел случайно через Яндекс, по всем вопросам пишите support@personalmail.ru
...
Рейтинг: 0 / 0
Как выбрать записи с максимальными значениями одной колонки?
    #36682360
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Wizetсовсем расширенный вариант:

select id,value,max(s_value) from table1 group by id

Выбирает для каждого ID значение value у которого значение s_value максимально, например выбрать максимальные суммы заказов и имена для каждого работника за год будет так:
select id,name,max(zakaz_price) where year=2009 from table1 group by id

на выходе будет id - имя сотрудника - максимальная стоимость заказа за 2009 год

П.С. Пример придуманный - понятно что хранить имена сотрудников в таблице заказов глупо =)
П.П.С. Тему нашел случайно через Яндекс, по всем вопросам пишите support@personalmail.ruСтарее темы не было? А то и двух лет не прошло.

З.Ы. Я уже молчу про то, что ни один из приведенных запросов работать не будет.
...
Рейтинг: 0 / 0
Как выбрать записи с максимальными значениями одной колонки?
    #36682559
Wizet
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Поисковику пофиг на возраст, а ответа в тему никто так и не дал.
в примере выше - id это не primary key а идентификатор сотрудника, и заранее извиняюсь - не глянул название ветки, писал по mysql - там все запросы работают 100%, только что проверил вот такой запрос
select obor_id,cena,max(date_in) from price_change group by obor_id - вывел последние цены по каждому оборудованию по date_in (int, unix timestamp), возможно mssql не поддерживает агрегатные функции в имени поля, нужно проверять....
...
Рейтинг: 0 / 0
Как выбрать записи с максимальными значениями одной колонки?
    #36682572
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WizetПоисковику пофиг на возраст, а ответа в тему никто так и не дал.
в примере выше - id это не primary key а идентификатор сотрудника, и заранее извиняюсь - не глянул название ветки, писал по mysql - там все запросы работают 100%, только что проверил вот такой запрос
select obor_id,cena,max(date_in) from price_change group by obor_id - вывел последние цены по каждому оборудованию по date_in (int, unix timestamp), возможно mssql не поддерживает агрегатные функции в имени поля, нужно проверять....Для полноты ответа еще надо написать запросы, работающие на оракле, постгри и дб/2.
...
Рейтинг: 0 / 0
Как выбрать записи с максимальными значениями одной колонки?
    #36682605
iap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Интересно, и какая же cena возвращается для одного конкретного obor_id ?
Минимальная, максимальная, средняя - какая?
...
Рейтинг: 0 / 0
Как выбрать записи с максимальными значениями одной колонки?
    #36682628
iljy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iapИнтересно, и какая же cena возвращается для одного конкретного obor_id ?
Минимальная, максимальная, средняя - какая?
Если obor_id первичный ключ - она единственная. мускуль тут отходит от стандарта, в мсскуле надо писать group by obor_id,cena, хотя группировку по цене оптимизатор тут все рано уберет.
...
Рейтинг: 0 / 0
Как выбрать записи с максимальными значениями одной колонки?
    #36682697
Wizet
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
iap, а вы правы на 100%, не сортирует.. а тема оказывается глубже чем я думал...
...
Рейтинг: 0 / 0
Как выбрать записи с максимальными значениями одной колонки?
    #36682731
iap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iljyiapИнтересно, и какая же cena возвращается для одного конкретного obor_id ?
Минимальная, максимальная, средняя - какая?
Если obor_id первичный ключ - она единственная. мускуль тут отходит от стандарта, в мсскуле надо писать group by obor_id,cena, хотя группировку по цене оптимизатор тут все рано уберет.Если obor_id первичный ключ, то глупо его писать в GROUP BY.
Ну если только по каким-то веским и очень хитрым причинам.
...
Рейтинг: 0 / 0
Как выбрать записи с максимальными значениями одной колонки?
    #36682736
iap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Wizetiap, а вы правы на 100%, не сортирует.. а тема оказывается глубже чем я думал...А где я в этой теме про сортировку говорил?
Чего-то не вижу...
...
Рейтинг: 0 / 0
Как выбрать записи с максимальными значениями одной колонки?
    #36682813
Wizet
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
iap, вы спрашивали какую цену выводит... в том запросе выводит без сортировки - первую попавшуюся..

и народ не тупите - группировать по первичному ключу это идиотизм, первичный ключ в запросе вообще не фигурирует . obor_id это номер оборудования для которого в дату date_in была установлена цена cena
правильный запрос сейчас выглядит так

select obor_id,cena from price_change where date_in IN (select max(date_in) from price_change group by obor_id)

подзапрос выбирает максимальные (последние) даты для каждого оборудования, а сам запрос находит по этим датам соответвующие строки и выводит в виде таблицы id_оборудования,цена

п.с. запрос работает при условии уникальности date_in, в противном случае пришлось бы доставать значения primary_key
...
Рейтинг: 0 / 0
Как выбрать записи с максимальными значениями одной колонки?
    #36682843
Wizet
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
жаль, но по факту укоротить запрос не удалось, в первых постах уже был дан ответ, правда в урезанной форме
...
Рейтинг: 0 / 0
Как выбрать записи с максимальными значениями одной колонки?
    #36682869
iap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Wizetiap, вы спрашивали какую цену выводит... в том запросе выводит без сортировки - первую попавшуюся..Ааа! А я уж было подумал, вычисляет по каким-то определённым правилам.
...
Рейтинг: 0 / 0
Как выбрать записи с максимальными значениями одной колонки?
    #36682883
Wizet
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
а для гуру SQL задачка
можно ли при использовании неуникальных значений date_in обойтись без двух подзапросов, т.к. получаются уже 3 запроса:
выборка date_in,
выборка primary_key по первой выборке,
выборка нужных колонок по второй выборке
...
Рейтинг: 0 / 0
Как выбрать записи с максимальными значениями одной колонки?
    #36682889
Wizet
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
нет... тут вообще фигня... он первичный ключи по неуникальным значениям не вытащит......
...
Рейтинг: 0 / 0
Как выбрать записи с максимальными значениями одной колонки?
    #36682901
iap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Wizetжаль, но по факту укоротить запрос не удалось, в первых постах уже был дан ответ, правда в урезанной формеWizet
Код: plaintext
select obor_id,cena from price_change where date_in IN (select max(date_in) from price_change group by obor_id)
Версия MSSQL >= 9.01
Код: plaintext
1.
2.
SELECT TOP( 1 )WITH TIES *
FROM price_change
ORDER BY RANK()OVER(PARTITION BY obor_id ORDER BY date_in DESC);

2
Код: plaintext
1.
2.
3.
WITH CTE AS(RANK()OVER(PARTITION BY obor_id ORDER BY date_in DESC)N,* FROM price_change)
SELECT *
FROM CTE
WHERE N= 1 ;

3
Код: plaintext
1.
2.
SELECT pc.*
FROM price_change pc
CROSS APPLY (SELECT TOP( 1 ) WITH TIES * FROM price_change t WHERE t.obor_id=pc.obor_id ORDER BY date_in DESC) T;

Это имеете в виду?
...
Рейтинг: 0 / 0
Как выбрать записи с максимальными значениями одной колонки?
    #36682926
iap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нет, №3 - неточен (сам никогда так не делаю). Наверно, так:версия MSSQL >= 9.03
Код: plaintext
1.
2.
3.
SELECT pc.*
FROM price_change pc
CROSS APPLY (SELECT TOP( 1 ) WITH TIES * FROM price_change t WHERE t.obor_id=pc.obor_id ORDER BY date_in DESC) T
WHERE pc.id=T.id;

где id - это PK
...
Рейтинг: 0 / 0
Как выбрать записи с максимальными значениями одной колонки?
    #36682942
Wizet
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
iap, спасибо за перевод между языками ;)

а по поводу задачки выше - решить её через временную таблицу можно... но в любом случае не гарантирована уникальность связки obor_id и date_in - так как это не первичные ключи

сейчас проверка реализована посредством php перед выводом в браузер, вот думал перенести нагрузку с php на БД, но видно не судьба - а то вылавливай потом ошибки.....
...
Рейтинг: 0 / 0
Как выбрать записи с максимальными значениями одной колонки?
    #36683382
iljy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iapЕсли obor_id первичный ключ, то глупо его писать в GROUP BY.
Ну если только по каким-то веским и очень хитрым причинам.
Например если идет join с другой таблицей.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Как выбрать записи с максимальными значениями одной колонки?
    #38566958
shura223
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вопрос аналогичен сабжу, только запрос с использованием group by не подойдет, так как используется внутри CTE (рекурсии).
Если конкретнее, то есть таблица с полями: ID, ObjectID, ParentID, Amount, Version. То есть дерево (связанное через ObjectID - ParentID), где для каждого узла есть свой Amount. При его изменении не меняется запись, а добавляется новая запись с инкрементированной версией. При построении дерева используется рекурсивный обход через WITH AS CTE. Если версия одна, то все нормально, а если несколько, то надо брать последнюю, но если ее определять через select max(version), ... group by ..., то выдается ошибка, что нельзя использовать group by внутри CTE. Причем неважно, что этот group by вообще никакого отношения к рекурсии не имеет.
Создать View и выбирать поля из него, вместо подзапроса с group by не предлагать, так как не желательно нарушать (добавлять, изменять) структуру таблицы.
...
Рейтинг: 0 / 0
Как выбрать записи с максимальными значениями одной колонки?
    #38566967
я только не понял, а кто мешает до построения рекурсии запросом выбрать в CTE выбрать только актуальные записи, а после по результату этого СТЕ строить второе, рекурсивное с обходом дерева?
...
Рейтинг: 0 / 0
Как выбрать записи с максимальными значениями одной колонки?
    #38566969
Фотография Ruuu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
shura223,

6603924
...
Рейтинг: 0 / 0
Как выбрать записи с максимальными значениями одной колонки?
    #38568773
shura223
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый Э - Эхя только не понял, а кто мешает до построения рекурсии запросом выбрать в CTE выбрать только актуальные записи, а после по результату этого СТЕ строить второе, рекурсивное с обходом дерева?
Не подскажите, как это можно сделать? Просто, как я понял, рекурсивные запросы должны начинаться со слов WITH и CTE. Собственно, то что вы посоветовали, я и пытаюсь сделать, только видимо синтаксис не тот, так как внутри рекурсии выбираю актуальные записи. Вне ее мне представляется возможным сделать это только через создание view, но в данном случае это не подходит.

Ruuushura223,

6603924
Логично представить, что все сообщения в этой теме я прочитал, перед тем как постить в нее вопрос.
...
Рейтинг: 0 / 0
Как выбрать записи с максимальными значениями одной колонки?
    #38568822
shura223,

юзабильный репрезентативный набор тестовых данных и желаемый результат на них приводи. сразу увеличится число желающих помочь тебе в решении задачи.
...
Рейтинг: 0 / 0
Как выбрать записи с максимальными значениями одной колонки?
    #38568827
iap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
shura223как я понял, рекурсивные запросы должны начинаться со слов WITH и CTE.Что за чушь?
CTE - это просто аббревиатура англоязычного названия этой конструкции в литратуре ( C ommon T able E xpression)
...
Рейтинг: 0 / 0
Как выбрать записи с максимальными значениями одной колонки?
    #38568832
iap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iapshura223как я понял, рекурсивные запросы должны начинаться со слов WITH и CTE.Что за чушь?
CTE - это просто аббревиатура англоязычного названия этой конструкции в литратуре ( C ommon T able E xpression)Ничто не мешает использовать эту аббревиатуру в качестве имени общего табличного выражения.
Как и любое другое допустимое слово и даже произвольный набор не более 128 символов!
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Как выбрать записи с максимальными значениями одной колонки?
    #39808395
pashaspashas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день.
код примерно такого вида будет по идее:

SELECT z.t_ID
FROM dHistoryCompGVZ_dbt z,
(SELECT MAX (y.t_systime) max_time, MAX (xx.max_) max_date
FROM dHistoryCompGVZ_dbt y,
(SELECT MAX (x.t_SysDate) max_
FROM dHistoryCompGVZ_dbt x
WHERE x.t_IDGVZ = 1) xx
WHERE y.t_IDGVZ = 1 AND y.t_sysdate = xx.max_) yy
WHERE z.t_IDGVZ = 1
AND z.t_systime = yy.max_time
AND z.t_sysdate = yy.max_date;
...
Рейтинг: 0 / 0
Как выбрать записи с максимальными значениями одной колонки?
    #39808475
Фотография Щукина Анна
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pashaspashas,

вы пять лет рожали эту несуразность? И это при условии, что правильных ответов сильно больше одного и любой - прямее вашего?
...
Рейтинг: 0 / 0
Как выбрать записи с максимальными значениями одной колонки?
    #39808476
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pashaspashasДобрый день.
код примерно такого вида будет по идее:Удивительная тема. На вопрос автора дали несколько ответов с интервалом 2-5 лет.
...
Рейтинг: 0 / 0
Как выбрать записи с максимальными значениями одной колонки?
    #39808477
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvgpashaspashasДобрый день.
код примерно такого вида будет по идее:Удивительная тема. На вопрос автора дали несколько ответов с интервалом 2-5 лет.Видимо, хорошо ищется.
...
Рейтинг: 0 / 0
Как выбрать записи с максимальными значениями одной колонки?
    #39808641
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гавриленко Сергей АлексеевичalexeyvgУдивительная тема. На вопрос автора дали несколько ответов с интервалом 2-5 лет.Видимо, хорошо ищется.Ага, но плохо читается :-)
...
Рейтинг: 0 / 0
37 сообщений из 37, показаны все 2 страниц
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как выбрать записи с максимальными значениями одной колонки?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]