我希望有人能幫助我。 我看了其他線程,但我無法找到正確的答案。使用MAX進行mysql查詢
我有一個MySQL數據庫具有以下數據:
id, company, datefrom, dateto, rate, point1, point2
1, DHL, 2014-03-01, 2014-03-31, $1000, Paris, New York
2, MRW, 2014-03-01, 2014-03-31, $1300, Paris, New York
3, EXP, 2014-03-01, 2014-03-31, $1000, Paris, New York
4, DHL, 2014-03-06, 2014-03-31, $900, Paris, New York
5, FED, 2014-03-01, 2014-03-31, $1200, Paris, New York
我需要做的地方,根據日期查詢,這將只顯示該日起有效的利率。 例如,如果今天是2014年3月6日,我需要的結果是:
2, MRW, 2014-03-01, 2014-03-31, $1300, Paris, New York
3, EXP, 2014-03-01, 2014-03-31, $1000, Paris, New York
4, DHL, 2014-03-06, 2014-03-31, $900, Paris, New York
5, FED, 2014-03-01, 2014-03-31, $1200, Paris, New York
正如你所看到的,記錄1也不會顯示爲記錄4替換記錄1爲2014年3月6日
我曾嘗試以下查詢,它的工作:
SELECT id, company, MAX(datefrom), dateto, rate, point1, point2 FROM mydatabase
WHERE datefrom<='2014-03-06' and datefrom>='2014-03-06'
AND point1='Paris' AND point2='New York' GROUP BY company, point1, point2
這個查詢只是它選擇了所有企業的偉大工程,但對於DHL,它從記錄1,但datefrom從記錄4選擇所有的領域!
我在做什麼錯?
這個問題是問的每一天在SO(通常correctky回答),所以看看周圍。 – Strawberry
你在做什麼錯了 - 混合分組列與非選擇組中。它在普通的SQL中無效。然而,MySQL允許這種行爲,但在這種情況下可以自由選擇任何行。您應該只選擇將行分組爲子查詢,然後將結果與原始表結合起來 –
完全正常 - 記錄號4具有最新日期,因爲MAX將從整個表中取最大值。所以你查詢會在每一行中放入相同的值。 – Rolice