2011-07-18 84 views
1

因此,我使用此代碼從數據庫獲取每一天的最後一個條目。如何使用帶CONVERT_TZ的MySQL來獲取每天的最後一個條目()

SELECT a.id, a.userid, a.jurisdiction, a.country, a.date 
FROM dk_location_records AS a, 
     (SELECT userid, DATE(date) AS just_date, MAX(date) AS date 
      FROM dk_location_records 
      GROUP BY 1, 2 --userid, DATE(date) 
     ) AS b 
WHERE a.userid = b.userid 
AND a.date = b.date; 

我的問題是,我怎麼可以將類似:CONVERT_TZ(date, '+00:00', '+01:00')得到每天的最後一項爲不同的時區。到目前爲止,我已設法使用CONVERT_TZ來簡單顯示轉換日期。但是,您可以同時使用MAX()CONVERT_TZ()嗎?

回答

0

如果要在極端情況下選擇單行,可以通過按照所需條件對結果集進行排序並將輸出限制爲單行來嘗試。東西,也許,就像

SELECT a.id, a.userid, a.jurisdiction, a.country, a.date 
ORDER BY CONVERT_TZ(date, '+00:00', '+01:00') DESC 
LIMIT 1 

它應該比做子查詢表掃描更快。

雖然,我可能會誤解你在這裏做什麼。轉換時區不會改變日期的順序。如果您想在另一個時區一天之內搜索條目,它可能嘗試

SELECT a.id, a.userid, a.jurisdiction, a.country, a.date 
WHERE CAST(CONVERT_TZ(a.date, '+00:00', '+01:00') AS DATE) = CURDATE() 
ORDER BY a.date DESC 
LIMIT 1 

當然,修改'+01:00'(目的地時區)和CURDATE()(日期你正在尋找),以滿足您的需求。

+0

嗨Nalthariel,謝謝你。我會盡量多解釋一下。 目前,所有的日期都是UTC。我正在構建的應用程序每天存儲多條數據條目。我想要通過每一天獲得最後一次輸入,並從中輸出信息。 如果我們假設我正在談論UTC中的最後一個條目,那麼上述方法很好。但是,當然,如果我在新加坡的最後一次入境會有所不同。所以,使用相同的數據集,我需要從不同時區的每一天獲取最後一個條目... –

+0

...所以,一個例子。我有一個條目,說我在7月17日晚上11:58在英國時間是UTC(現在忽略夏令時)。在新加坡,同樣的條目將顯示我在7月18日上午7:58在英國。因此,在新加坡的時區,這不是最後一天,因爲在7月18日下午3:58(UTC)7月18日晚11點58分(新加坡)可能會有另一個入口。 我很欣賞這有點瘋狂,但我認爲,如果我可以做到這一點,這是實現我正在嘗試做的最好的方法。 –

+0

在這種情況下,如果您在結果集上添加了條件約束,那麼上面的方法就可以工作,定義您嘗試限制的那一天,就像我添加到答案中一樣。 – Naltharial

相關問題