powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как выбрать записи с максимальными значениями одной колонки?
25 сообщений из 37, страница 1 из 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
25 сообщений из 37, страница 1 из 2
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как выбрать записи с максимальными значениями одной колонки?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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