次のフィールドとデータを含むテーブルがあります。
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
これを解決するのを手伝ってください。
次のフィールドとデータを含むテーブルがあります。
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
これを解決するのを手伝ってください。
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)
EDIT 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)
これはうまくいきますか?年と月を組み合わせて SQL が MAX を取得できるようにし、この変更されたバージョンのテーブルにテーブルを結合します。
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
テーブル名が「table1」であるとします
select * from
(select * from table1 where Year in (select max(Year) from table1)) abc
where Month not in (select min(Month) from abc)
私は解決策を持っています:
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