好吧,我有多個日期時間列,如date_created,last_login,last_updated等...我想將它們合併到一個列中,並顯示最近的日期時間,以便我可以更輕鬆地跟蹤active_users。MySQL將多個日期列合併爲一個
我發現了一些使用CONCAT命令的建議,但是看起來只是將所有結果串在一起。
好吧,我有多個日期時間列,如date_created,last_login,last_updated等...我想將它們合併到一個列中,並顯示最近的日期時間,以便我可以更輕鬆地跟蹤active_users。MySQL將多個日期列合併爲一個
我發現了一些使用CONCAT命令的建議,但是看起來只是將所有結果串在一起。
試試這個:
SELECT username,
GREATEST(date_created, last_login, last_updated) last_activity
FROM your_table
ORDER BY last_activity DESC
編輯:
SELECT username,
GREATEST(
IFNULL(date_created, 0),
IFNULL(last_login, 0),
IFNULL(last_updated, 0)
last_activity
FROM your_table
ORDER BY last_activity DESC
再次編輯:
在你的數據庫的副本(有27.451記錄)我用:
SELECT id,
GREATEST(
IFNULL(current_login_datetime, 0),
IFNULL(created_datetime, 0),
IFNULL(updated_datetime, 0))
last_activity
FROM users
ORDER BY last_activity DESC
獲取27.451條記錄!
爲了證明,運行此查詢:
SELECT COUNT(*) FROM
(SELECT id,
GREATEST(
IFNULL(current_login_datetime, 0),
IFNULL(created_datetime, 0),
IFNULL(updated_datetime, 0))
last_activity
FROM users
ORDER BY last_activity DESC) der
,並檢查返回的數字是一樣的查詢
SELECT COUNT(*) FROM users
你的問題可以從限制在總返回或顯示的記錄導出。
例如,使用Navicat燈,您可以有1000條記錄(但總共可以讀取27.451條記錄)。
如果值可以爲空,並且您想要選擇第一個非null
值,請使用COALESCE。 GREATEST
和LEAST
也選擇
SELECT
username
,COALESCE(last_updated,last_login,date_created) AS not_null
,GREATEST(date_created, last_login, last_updated) AS latest
,LEAST(date_created, last_login, last_updated) AS first
FROM table1
ORDER BY last_activity DESC
如果你想要更多的控制,你可以使用CASE WHEN語句:
SELECT
username
, CASE WHEN date_created > '2011-01-31' THEN date_created
WHEN last_login > '2011-01-31' THEN last_login
ELSE last_updated END as its_complicated
.....
如果你想要最新的,你有null
值左右浮動,使用此查詢:
SELECT
username
,GREATEST(IFNULL(date_created,0), IFNULL(last_login,0), IFNULL(last_updated,0)) AS latest
FROM table1
ORDER BY last_activity DESC
下面是我正在使用的屏幕截圖http://imageshack.us/f/851/screenshot20110926at424.png/ COALESCE運算符略有改進,但即使not_null列中有數據對於每行都有不是最新的日期。 –
@Ryan Grush:使用'IFNULL'應該可以解決這個問題... – Marco
這看起來工作起初,但它只發現像行的1/10值。當我用'最少'取代'最大'時,它有1/5行。我試圖診斷問題,但我沒有太多運氣。 –
當我刪除幾列時,它增加了包含數據的行數。也許包含某種形式的OR運算符? –
@Ryan Grush:我從來沒有聽說過這種行爲:( – Marco