我有一個包含以下字段和數據的表。在mysql查詢中查找多行的最大列數
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
請幫我解決這個問題。
我有一個包含以下字段和數據的表。在mysql查詢中查找多行的最大列數
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
請幫我解決這個問題。
說你的表名是 「table1的」,那麼
select * from
(select * from table1 where Year in (select max(Year) from table1)) abc
where Month not in (select min(Month) from abc)
這是否對你的工作?這個想法是將Year和Month組合成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
不錯。我想你忘記爲'CombinedDate'添加條件了(它也必須參加加入,我明白了)。另外,爲什麼不使用當前標準的語法進行連接?你的過時,即使它正在工作。我的意思是,畢竟,你爲別人提供瞭解決方案。 –
哦,我的,你是對的 - 這裏有各種各樣的問題。無論如何,謝謝你的建設性批評。我很喜歡這個地方! –
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 WORKS版本...
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)
這將有可能在MySQL的某一天工作。 –
+1:'* facepalm *' – MatBailie
我已經得到了解決:
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
你想爲每個'Code'做到這一點? – wlk