Как я могу запросить мою таблицу, чтобы сгруппировать ее по 2 полям в mySQL? - PullRequest
0 голосов
/ 23 апреля 2020

Я застрял.

Я пытаюсь запросить одну из моих таблиц, чтобы получить максимальное значение 'canister_change_date' с сгруппированными парами 'canister_type' и 'test_cell'.

Я собрал таблицу с некоторыми фиктивными данными (ниже). Если вам нужна схема создания таблицы, дайте мне знать, и я добавлю ее в комментарии. 43

Конечный результат должен иметь либо идентификатор, либо целую строку с идентификатором.

ожидаемый результат (ниже) будет иметь идентификаторы - 1, 2 , 3, 5, 7, 8

6 должны быть удалены как совпадающая пара (test_cell = 4, canister_type = окись углерода) и 7 должны быть взяты, так как они имеют более позднюю дату 'canister_change_date'.

Ожидаемый результат должен иметь либо идентификатор, либо идентификатор, а также остальные поля.

enter image description here

Спасибо!

Ответы [ 2 ]

2 голосов
/ 23 апреля 2020

Вы можете использовать GROUP BY для нескольких столбцов, точно так же, как это

SELECT COUNT(*) FROM my_table GROUP BY column1, column2

Если вы хотите найти строку с наибольшим значением некоторого столбца, тогда вам понадобится HAVING предложение и MAX() статистическая функция , Вы можете комбинировать их следующим образом:

SELECT max_column, column1, column2
GROUP BY column1, column2          
HAVING max_column = MAX(max_column)

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

.
1 голос
/ 24 апреля 2020

С NOT EXISTS:

select t.* from tablename
where not exists (
  select 1 from tablename
  where test_cell = t.test_cell and canister_type = canister_type
    and canister_change_date > t.canister_change_date
)

или если ваша версия MySql равна 8.0+ и поддерживает оконные функции:

select t.* from (
  select *, 
    row_number() over (partition by test_cell, canister_type order by canister_change_date desc) rn
  from tablename
) t
where t.rn = 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...