Как мне группировать по минимальному значению в одном поле таблицы, сохраняя все значения из той же строки?

У меня есть таблица вроде этого:

Field1 | Field2 | Field3 1 | 1 | 22 1 | 2 | 10 2 | 5 | 40 2 | 2 | 55 

Я хочу группировать Field1, а затем принимать значения из остальной части строки с минимальным полем 2, например:

 Field1 | Field2 | Field3 1 | 1 | 22 2 | 2 | 55 

Обратите внимание, что это не то же самое, что выбрать минимум каждой строки, что дало бы:

 Field1 | Field2 | Field3 1 | 1 | 10 2 | 2 | 40 

Который с моими данными был бы бессмысленным результатом.

У кого-нибудь есть общее (т. Е. Несколько баз данных) решение? Я уверен, что это должна быть проблема!

Я мог бы действительно сделать с решением, которое работает как в sqlite, так и в ms-access, и sql-сервер будет бонусом.

Вам придется выполнить это с помощью подзапросов.

 Select * from yourtable t inner join ( Select field1, min(field2) as minField2 from yourtable group by field1 ) xx on t.field1 = xx.field1 and t.field2 = xx.minfield2 

Теперь, если у вас есть несколько строк для минимального значения field2, тогда у вас будут обманы … Если вы этого не хотите (т. Е. Вы хотите минимальное значение поля3 для каждого минимального значения поля2), в этом случае вы 'нужен другой запрос sub:

 Select outert.field1, outert.field2, outert.field3 from yourtable outert inner join ( Select t.field1, xx.minfield2, min(field3) as minfield3 from yourtable t inner join ( Select field1, min(field2) as minField2 from yourtable group by field1 ) xx on t.field1 = xx.field1 and t.field2 = xx.minfield2 group by t.field1, xx.minfield2 ) outerx on outerx.field1 = outert.field1 and outerx.field2 = outert.minfield2 and outerx.field3 = outert.minfield3 

Как вы видите, есть решение, которое работает с использованием только стандартного SQL, но оно длинное и сложное.

Обратите внимание, что также можно написать «Привет, мир!». которая работает правильно на трех разных языках программирования. Однако это обычно не добавляет никакой ценности вашей программе. Гораздо проще просто написать программу три раза, адаптированную к конкретному синтаксису каждого языка.

Я думаю, что с SQL часто бывает лучше забыть, пытаясь найти решение, которое работает во всех РСУБД, и использовать конкретные расширения и идиомы поставщиков, которые упрощают запросы. Например, в MS SQL Server вы можете сделать что-то вроде этого:

 SELECT Field1, Field2, Field3 FROM ( SELECT *, ROW_NUMBER() OVER (PARTITION BY field1 ORDER BY field2) AS rn FROM table1 ) AS T1 WHERE rn = 1 

Во всяком случае, у вас уже есть общее решение, поэтому я просто подумал, что предлагаю эту альтернативную точку зрения.

  • Использование Sqlite InMemory DB для unittesting MSSQL-DB
  • Эффективное использование транзакций SQL
  • Добавление данных в столбец
  • Самый эффективный способ перемещения нескольких таблиц SQL Server в SQLite?
  • LocalDatabase - короткоживущее или долгоживущее соединение?
  • Решение для миграции баз данных на Oracle / SqlServer и SqlLite
  • SQLite как база данных в памяти для SQL Server
  • Копирование данных из sqlite в SQL Server
  • Groupwise MAX () в подзапросе
  • TSQL «IF @@ Rowcount> 0» аналог в Sqlite?
  • Каков риск повреждения / потери данных с постоянными запросами
  • Interesting Posts

    Функция, например USE, указывает на базу данных SQL на другом сервере?

    Как создавать уникальные номера внутри UDF (SQL Server)

    в чем разница между командой truncate и delete в SQL-запросе

    Ошибка блокировки SQL Server 2008

    Как написать SQL-запрос, который ищет значение во всех столбцах и всех таблицах в моей базе данных?

    Уведомление об изменении базы данных

    SSIS Переупорядочить полное имя в том же столбце

    Почему это непрактично, чтобы показать прогресс для операторов SQL?

    Как запустить настольное приложение с использованием базы данных SQL Server на другом компьютере, подключенном к локальной сети

    Матрица SSRS с несколькими группами

    SQL Server: замена всех специальных символов в строке SQL

    Сохранение результатов выполнения задачи SQL в Excel

    LIKE не работает в TSQL

    Хранимая процедура SQL Server для ключевого слова

    Часто использование «ОБНОВЛЕНИЯ СТАТИСТИКИ С FULLSCAN» является нормальным?

    Давайте будем гением компьютера.