2012-02-23 83 views
0

我有一個MySQL表(可惜沒有圖片的第一篇文章)MySQL查詢支持,請

Team_id,entry_date, entry_time,gridref 
"20","2011-12-14","10:21:00","496218" 
"20","2011-12-14","10:43:02","349217" 
"21","2011-12-14","10:48:00","351213" 
"22","2011-12-14","11:58:00","327216" 
"22","2011-12-14","11:21:00","328214" 
"23","2011-12-14","11:33:00","351210" 
"23","2011-12-14","10:42:11","350210" 
"23","2011-12-14","11:11:00","350208" 
"24","2011-12-14","10:39:00","329209" 
"24","2011-12-14","11:40:00","328211" 
"27","2011-12-14","11:04:31","344226" 
"29","2011-12-14","11:32:58","328208" 

的SQL來獲得,這是

SELECT team_id, entry_date, entry_time, gridref 
FROM `tlog` 
WHERE gridref != '' 
    AND team_id != 0 
    AND (entry_date = (SELECT MAX(entry_date) FROM `tlog`)) 
ORDER BY `tlog`.`team_id` ASC 

有幾天相當多的數據的並且每個團隊的參賽作品可以以任何順序進行創作,並且在信息發佈時不需要(如果可以在一天之後輸入)。我在嘗試輸入yyyy-mm-mm hh:mm格式的用戶遇到問題,因爲他們錯過了空格和字符。因此,單獨的日期和時間已經解決了這個問題。

也有條目不涉及團隊或沒有gridref。但是,每個條目都有一個entry_date和entry_time。 entry_date的MySQL格式是DATE,entry_time是TIME。

我有高級一刻試圖獲得每個團隊的最後一項。請有人把我的骨頭扔給我咀嚼。

+1

也許數據類型需要使用'GROUP BY tlog.team_id'? – ArVan 2012-02-23 08:38:31

+0

嘗試使用'SELECT * FROM tlog WHERE gridref!=''AND team_id!= 0 ORDER BY tlog.entry_date DESC GROUP BY tlog.team_id;' – Pateman 2012-02-23 08:42:06

+1

你是什麼意思_「獲取每個團隊的最後一個條目」_? – CodeCaster 2012-02-23 08:42:38

回答

0

你需要讓每個參賽隊最多日期,那麼最大時間爲子查詢,每隊當日則在團隊的ID,日期和時間外部查詢聯接:

select t.teamid, t.entryDate, t.entryTime, t.gridRef 
from tlog t 
inner join (select t2.teamid, med.ed, max(entryTime) et from tlog t2 
       inner join (select teamid, max(entryDate) ed from tlog where teamid > 0 and gridRef <> '' group by teamid) med on med.teamid = t2.teamid and med.ed = t2.entryDate group by t2.teamid, med.ed) met on met.teamid = t.teamid and met.ed = t.entryDate and met.et = t.entryTime 

試圖建立像這樣的查詢只是通過邏輯步驟,即首先你需要每個團隊的最新日期 - 寫一個實現這個目標的查詢。那麼你需要每個日期的最新時間。然後找到與這些相匹配的細節。如果有助於使它更清晰,請使用臨時表格。

請注意,不能只有一個子查詢max(entryDate)和max(entryTime),因爲最近的時間不一定是最新的日期。

如果MySQL支持的,你想只有你需要連接的日期和時間一個子查詢一起例如

max(entryDate + ' ' + entryTime) 

顯然,對於這一點,你可能需要轉換到支持級聯

+0

嗯,試着讓我得到了和我一樣的結果。我會繼續玩,看看我怎麼走。 – tastech 2012-02-24 08:17:02

+0

對不起,意識到你有重複的日期。已更新查詢 – kaj 2012-02-24 08:49:10

+0

Aaahhh,現在我們正在接近,但有記錄沒有team_id或沒有gridref。所以我想過濾掉所有沒有team_id或gridref爲空的記錄,只顯示每個team_id> 0且gridref不爲空的最後記錄(!='')。 – tastech 2012-02-24 10:30:08

0

也許會有這樣的幫助:

SELECT MAX(entry_date) FROM `tlog` WHERE gridref != '' AND team_id != 0 GROUP BY team_id 
+0

儘管如此,這並不能提供最後的輸入。 – tastech 2012-02-24 07:50:24

0

只是存儲在datetime或INT(時間戳)列中的日期和時間。是的,可以這樣做,但是你沒有獲利,而是有問題。

修復此問題在視圖層。如果用戶在輸入日期時出錯,請使用javascript日曆控件並讓他們選擇日期和時間。

如果這是不可能的,那麼使用strtotime()和一些字符串連接來解析輸入。

+0

帶時間戳的問題是可能無序地輸入條目,並且可能在2-3天后輸入,所以在這種情況下按時間戳排序不起作用。 – tastech 2012-02-24 07:49:10

+0

@ user1227400 timestamp列不必填充_current_時間戳。 – CodeCaster 2012-02-24 08:49:47

+0

是的,我知道,但由於某些管理方面的原因,我無法使用組合的日期/時間字段。 – tastech 2012-02-24 10:21:03