2015-07-20 44 views
1

我在寫一個查詢來獲取所有客戶信息並顯示他們上次訂購的時間。我當前的查詢是:MYSQL Inner Join按升序排序DateTime

SELECT 
`user`.fname, 
`user`.lname, 
`user`.email, 
`order`.orderplaced_ts, 
COUNT(*) AS Total 
FROM `order` 
INNER JOIN `user` ON `order`.user_id = `user`.id 
WHERE `order`.store_id = 10 
AND `order`.orderplaced_ts > "2015-01-01 00:00:00" 
AND `order`.order_status != "Cancelled" 
GROUP BY `order`.user_id 
ORDER BY `order`.orderplaced_ts 

我試過ASC和DESC的ORDER BY order.orderplaced_ts後,但仍然沒有回來時,我想要的東西。

編輯:目前的結果

First Last   Email     Date     Count 
Lisa Day   [email protected] 2015-01-08 13:16:31 105 
Alex Sullivan  [email protected] 2015-01-05 11:48:33 90 
Jill GORDON  [email protected] 2015-01-02 12:52:57 68 
Bob  Jain   [email protected] 2015-03-23 12:39:24 62 
Jack Merkher  [email protected] 2015-01-05 11:19:31 56 

日期字段顯示他們第一次排序,而我要的是他們訂購的最後一次。

期望的結果將是:

ID  User_ID Store_ID orderplaced_ts 
1104121 214831 10   2015-01-02 11:04:49 
1104261 559281 10   2015-01-02 11:21:34 
1104791 420461 10   2015-01-02 12:10:34 
1105041 801481 10   2015-01-02 12:33:58 
1105051 216501 10   2015-01-02 12:35:28 
1105191 814661 10   2015-01-02 12:42:26 
1105241 304571 10   2015-01-02 12:44:31 
1105321 781611 10   2015-01-02 12:52:41 
1105331 528411 10   2015-01-02 12:52:57 
1105641 752171 10   2015-01-02 13:36:10 
1106061 458791 10   2015-01-02 15:46:24 

那麼我現在要做的是讓所有的用戶,有多少次,他們下令什麼:從SELECT *

First Last   Email     Date     Count 
    Lisa Day   [email protected] 2015-07-08 13:16:31 105 
    Alex Sullivan  [email protected] 2015-07-05 11:48:33 90 
    Jill GORDON  [email protected] 2015-07-02 12:52:57 68 
    Bob  Jain   [email protected] 2015-07-23 12:39:24 62 
    Jack Merkher  [email protected] 2015-07-05 11:19:31 56 

樣本數據是他們放置的最近訂單。

Inner Join只是檢索用戶的電子郵件,名字和姓氏。

我認爲解決問題的最終查詢看起來如下:

不在的 Group By條款 必須有像 summax聚合函數
SELECT 
    `user`.fname, 
    `user`.lname, 
    `user`.email, 
    COUNT(*) AS Total_Orders, 
    `order`.orderplaced_ts AS First_Order, 
    MAX(order.orderplaced_ts) AS Last_Order 
FROM `order` 
INNER JOIN `user` ON `order`.user_id = `user`.id 
WHERE `order`.store_id = 10 
AND `order`.orderplaced_ts > "2015-01-01 00:00:00" 
AND `order`.order_status != "Cancelled" 
GROUP BY `order`.user_id ASC 
ORDER BY `order`.orderplaced_ts 
+0

'asc'通常是默認的排序順序,所以如果你想讓最近的orderplaced_ts在結果中顯示FIRST,它必須是'desc'。 –

+0

這是怎麼回事?您能提供示例數據,期望結果和實際結果嗎? – mjr

+0

你有沒有試過MAX('order'.orderplaced_ts)?我認爲Meoiswa就在下面,你應該使用聚合函數,而不是嘗試通過orderplaced_ts – mjr

回答

3

你的所有選擇值。 否則,分組選擇將無法知道顯示哪個值。

我建議由user.fnameuser.lnameuser.email代替order.user_id

分組的行按@Uueerdo的評論:排序方式MAX(order.orderplaced_ts)會做的伎倆

+2

考慮到他(有效)在用戶的主鍵上進行分組,GROUP BY應該沒問題;但他可能應該查詢並按'MAX(order.orderplaced_ts)'# – Uueerdo

+0

@Uueerdo命令 - 謝謝!那正是我需要的。 – Bardworx

+0

@Uueerdo也許你應該把它作爲回答<3 – Meoiswa