Запрос SQL: выберите максимум 2 столбца в одной строке - PullRequest
0 голосов
/ 02 мая 2018
Column1 | Column2
--------+-------- 
1       |    1
3       |    2
1       |    3
2       |    1
2       |    4

Я хочу максимум столбца1 и после этого максимум столбца2: в этом примере -> 3: 2

Ответы [ 5 ]

0 голосов
/ 02 мая 2018

Если вы хотите, чтобы вся строка имела максимальное значение column1, попробуйте это ...

SELECT TOP 1 * 
FROM   tablename 
ORDER  BY column1 DESC 

Дата выборки

+---------+---------+
| Column1 | Column2 |
+---------+---------+
| 1       |       1 |
| 3       |       2 |
| 1       |       3 |
| 2       |       1 |
| 2       |       4 |
+---------+---------+

выход

+----------+----------+
| Column1  |  Column2 |
+----------+----------+
| 3        |        2 |
+----------+----------+

, если вам нужны максимальные значения column1 и column2, попробуйте это ...

SELECT MAX(column1) as column1, 
       MAX(column2) as column2
FROM   tablename 

Дата выборки

+---------+---------+
| Column1 | Column2 |
+---------+---------+
| 1       |       1 |
| 3       |       2 |
| 1       |       3 |
| 2       |       1 |
| 2       |       4 |
+---------+---------+

выход

+----------+----------+
| Column1  |  Column2 |
+----------+----------+
| 3        |        4 |
+----------+----------+
0 голосов
/ 02 мая 2018

Для ваших примеров данных это будет работать:

SELECT Column1, Column2
FROM yourTable
WHERE Column1 = (SELECT MAX(Column1) FROM yourTable)

На основании вашего комментария

и после этого максимум столбца2

Вы, вероятно, хотите вместо этого:

SELECT Column1, MAX(Column2) as Column2
FROM yourTable
WHERE Column1 = (SELECT MAX(Column1) FROM yourTable)
GROUP BY Column1

Это обрабатывает случаи, когда есть несколько строк с MAX(Column1), и возвращает строку только среди тех, с MAX(Column2)

0 голосов
/ 02 мая 2018

Мне трудно интерпретировать вашу таблицу, но в SQL есть встроенные функции, которые помогут в ваших запросах.

SELECT MAX(column1), MAX(column2)
FROM table_name
WHERE condition;
0 голосов
/ 02 мая 2018

Я бы использовал order by:

select column1, column2
from t
order by column1 desc, column2 desc
fetch first 1 row only;

Я вижу, что вы используете MS Access, так что это сформулировано как:

select top (1) column1, column2
from t
order by column1 desc, column2 desc;

Единственная проблема с этим подходом состоит в том, что он может вернуть несколько строк, если у вас есть дубликаты в данных. Если это проблема, либо включите уникальный идентификатор в качестве последнего ключа в order by:

order by column1 desc, column2 desc, id;

Или используйте агрегацию:

select max(column1), max(column2)
from (select top (1) column1, column2
      from t
      order by column1 desc, column2 desc
     ) as t;

max() служит только для уменьшения результирующего набора до одной строки (в случае дубликатов). Поскольку все значения из подзапроса будут одинаковыми, будет работать практически любая функция агрегирования.

0 голосов
/ 02 мая 2018

Используйте следующее:

select column1, column2
  from tab 
 where column1 = ( Select max(column1) from tab );

Демонстрация SQL Fiddle

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...