2017-09-11 24 views
-2

我應該做出取得這一成果mysql命令按日期遞增,其次是USER_ID

這裏什麼查詢我行

 
user_id | date 
3   | 2017-09-07 
2   | 2017-09-08 
3   | 2017-09-10 

和查詢我想要的輸出是這

 
user_id | date 
3   | 2017-09-07 
3   | 2017-09-10 
2   | 2017-09-08 

但它不是基於user_id,我只是想查詢按日期順序排列的行ASC和user_id彼此相鄰。

+0

你有你已經測試了一個查詢?您可以使用http://sqlfiddle.com/ – kenfire

+0

爲什麼用戶2的記錄出現在用戶3的記錄之後? –

+0

@TimBiegeleisen它不是整個表我只是顯示了一個行的例子,以適應問題 – butching

回答

2

您可以使用下面的查詢:

SELECT user_id, MIN(date) AS min_date 
FROM mytable 
GROUP BY user_id 

得到最早的每用戶date值。

使用上面的查詢作爲派生表就可以達到所需的排序:

SELECT t1.user_id, t1.date 
FROM mytable AS t1 
JOIN (
    SELECT user_id, MIN(date) AS min_date 
    FROM mytable 
    GROUP BY user_id 
) AS t2 ON t1.user_id = t2.user_id 
ORDER BY t2.min_date, user_id, t1.date 

注:如果兩個或多個用戶共享的查詢會優先給用戶具有最小相同最早日期值爲user_id

+0

這個作品感謝 – butching

+0

@TimBiegeleisen這個解決我的問題沒有問爲什麼我行這樣的:) – butching

1

我想這應該做你婉什麼:

SELECT * FROM table ORDER BY user_id DESC, date ASC 

這裏舉例:http://sqlfiddle.com/#!9/899b0/2

+0

@ImranAli編輯 – kenfire

+0

正如我所說的,我不基於它的user_id所以此查詢不會工作。我期望的輸出是按日期ASC也與未來的user_id彼此 – butching

+0

我不明白的「相鄰」的一部分,你能介紹數據庫架構的一部分? – kenfire