2016-01-18 183 views
0

這是查詢,我正在嘗試獲取之前30天的數據。Mysql按日期排序

SELECT DAY(calendar.datefield) AS callDay, 
    DATE_FORMAT(calendar.datefield,"%d-%m-%Y") AS DataDate, 
    COUNT(user_appoint.`id`) AS total_appt, 
    SUM(CASE WHEN status_id=6 THEN 1 ELSE 0 END) AS fit, 
    SUM(CASE WHEN status_id=7 THEN 1 ELSE 0 END) AS unfit, 
    SUM(CASE WHEN status_id=1 THEN 1 ELSE 0 END) AS pending, 
    SUM(CASE WHEN status_id=19 THEN 1 ELSE 0 END) AS reexamined 
    FROM user_appoint 
    RIGHT JOIN calendar ON DATE(user_appoint.`ApptDateTime`) = calendar.`datefield` AND user_appoint.`comp_id` = 123 
    WHERE calendar.datefield BETWEEN DATE_SUB(NOW(), INTERVAL 30 DAY) AND NOW() 
    # and user_appoint.`comp_id` = 123 
    GROUP BY calendar.`datefield` 
    ORDER BY datadate ASC 

查詢的輸出如下: -

callDay DataDate total_appt  fit unfit pending reexamined 
------- ---------- ---------- ------ ------ ------- ------------ 
... 
14 14-01-2016   0  0  0  0    0 
15 15-01-2016   3  0  0  3    0 
16 16-01-2016   0  0  0  0    0 
17 17-01-2016   0  0  0  0    0 
18 18-01-2016   0  0  0  0    0 
20 20-12-2015   0  0  0  0    0 
21 21-12-2015   0  0  0  0    0 
22 22-12-2015   1  1  0  0    0 
23 23-12-2015   0  0  0  0    0 
... 

這是給我當月的數據格式的上升,之後前一個月遞增格式的數據。我希望上個月的數據以升序格式,並以asc格式存儲當前數據。

+0

我總覺得有點難以閱讀右連接,尤其是它們對條款並不指*加入*表,但*其他*表('和user_appoint.comp_id = 123')。我知道很多人都贊同這種觀點,所以您可能想重新編寫查詢來使用左連接,而不是爲了便於閱讀。 –

回答

2

您正在按日期創建的字符串進行排序,因此您將按字母順序排序。

排序上的日期來代替:

order by calendar.datefield asc;