2014-06-29 86 views
1

我是一個新手mySQL開發人員,我試圖解決一些棘手的問題。我有一張桌子上擺滿了「創建」時間戳的小時記錄。從MySQL的小時設置中選擇30個EOD記錄

我需要編寫一個查詢語句,將從表格中提取30條記錄,其中每條記錄是從NOW()開始的30天中最後一條記錄。

我隨後需要做同樣的24周和12個月,但我假設一旦我有1個查詢被解決了的日子,我可以找出其餘的。

在此先感謝

+0

你能否展示你到目前爲止已經嘗試過的以及如何從中得到的結果不符合你的要求? – mc110

回答

2

如果您使用適當的聚合查詢,這並不困難。

假設您的表格爲records,並且您的DATETIMETIMESTAMP列被稱爲time_stamp

試試這個:

SELECT DATE(time_stamp) AS the_day, 
     MAX(time_stamp) AS eod_timestamp 
    FROM records 
WHERE time_stamp >= CURDATE() - INTERVAL 30 DAY 
GROUP BY DATE(time_stamp) 

這得到最新的(MAX)TIME_STAMP每天在表中的最後30天。

如果要查找具有這些結束時間戳的records中的確切行,可以像這樣將此聚合查詢連接到records表。

SELECT eod.the_day, r.whatever, r.whatever, r.whatever 
    FROM records AS r 
    JOIN (
     SELECT DATE(time_stamp) AS the_day, 
       MAX(time_stamp) AS eod_timestamp 
     FROM records 
     WHERE time_stamp >= CURDATE() - INTERVAL 30 DAY 
     GROUP BY DATE(time_stamp) 
     ) AS eod ON r.time_stamp = eod.eod_timestamp 

注意,在查詢中ON條款從records有結束的一天時間戳翻出行。如果多個記錄具有相同的每日結束時間戳記,則此查詢將全部獲得。

+0

感謝Ollie!像魅力一樣工作。我能夠很容易地適應我所做的以及其他一些事情。整個子查詢加入對我而言是有點陌生​​的。 – dethfactor

+0

這個子查詢(或虛擬表格)彼此聯合的業務是STRUCTURED查詢語言的核心。 –

+0

我想我應該改寫一下,使用時間戳的子查詢..我已經完成了多年內部/外部連接,主要是頁面數據。在SQL中沒有做過很多與公制相關的東西,但我厭倦了使用我的腳本來完成繁重的工作。 – dethfactor