найти максимум набора столбцов для нескольких строк в запросе MySQL - PullRequest
0 голосов
/ 20 июня 2011

У меня есть таблица со следующими полями и данными.

RefNo Year Month Code
1     2010  7     A
2     2009  10    B
3     2010  8     A
4     2010  5     B

Из этого я должен выяснить максимальный (год, месяц) для конкретного кода.Результат должен быть

3   2010  8 A
1   2010  7 B

Пожалуйста, помогите мне решить эту проблему.

Ответы [ 4 ]

2 голосов
/ 20 июня 2011
SELECT
  *
FROM
(
  SELECT
    ROW_NUMBER() OVER (PARTITION BY Code ORDER BY Year DESC, Month DESC) AS row_number,
    *
  FROM
    myTable
)
  AS orderedTable
WHERE
  row_number = 1


РЕДАКТИРОВАТЬ А теперь для версии, которая работает в MySQL ...

SELECT
  *
FROM
  myTable
WHERE
  Year * 12 + Month = (SELECT MAX(Year * 12 + Month) FROM myTable AS lookup WHERE Code = myTable.Code)

РЕДАКТИРОВАНИЕ После доступа к SQL, можете подтвердить, что это быстрее ...

WHERE
    Year  = (SELECT MAX(Year)  FROM myTable AS lookup WHERE Code = myTable.Code)
AND Month = (SELECT MAX(Month) FROM myTable AS lookup WHERE Code = myTable.Code AND Year = myTable.Year)
1 голос
/ 20 июня 2011

Это работает для вас? Идея состоит в том, чтобы объединить год и месяц во что-то, что SQL может принять как МАКС, а затем присоединить таблицу к этой измененной версии.

SELECT OriginalTable.RefNo, OriginalTable.Year, OriginalTable.Month, OriginalTable.Code
FROM table OriginalTable,
     (SELECT Code, MAX(Year*100 + Month) AS CombinedDate
      FROM table
      GROUP BY Code) AS MaximumResults
WHERE OriginalTable.Code = MaximumResults.Code
AND OriginalTable.Year = MaximumResults.CombinedDate / 100
AND OriginalTable.Month = MaximumResults.CombinedDate % 100

Идея объясняется более подробно здесь: http://www.techonthenet.com/sql/max.php

0 голосов
/ 22 июня 2011

У меня есть решение:

Select Month(B.NewDate) Mon, Year(B.NewDate) Year, Code, PK
from T1 A ,
(Select Max(Str_To_Date(Concat('01',',',Month,',',Year), '%d,%m,%Y')) as NewDate, Code C
from T1 group by Code) B
Where PK = (Select PK from T1
                where Year = Year(B.NewDate) and Month = Month(B.NewDate)  and Code = A.Code)
and A.Code = C
group by Code
0 голосов
/ 20 июня 2011

Скажите, что ваше имя таблицы "table1", а затем

select * from
(select * from table1 where Year in (select max(Year) from table1)) abc
where Month not in (select min(Month) from abc) 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...