2015-11-01 57 views
-1

我使用的是MySQL數據庫的SQL是mysql命令由DAYNAME(自定義格式)

SELECT 
     CONCAT(YEAR(EVE_DATE),'-',MONTH(EVE_DATE),'-',DAYNAME(EVE_DATE)) AS WEEKDAY_DATE, 
     SUM(EVE_OCCUR) 
FROM 
     TABLE 
    WHERE 
     EVE_DATE BETWEEN '2015-01-01' AND '2015-10-31' 
    GROUP BY 
      WEEKDAY_DATE 
    ORDER BY WEEKDAY_DATE 

它生成的格式爲 「YYYY-MON-DAY」 的weekname的輸出。目前,輸出不是有序的。我想訂購如下

2015-01-Sun 
2015-01-Mon 
2015-01-Tue 
2015-01-Wed 
2015-01-Thu 
2015-01-Fri 
2015-01-Sat 
2025-02-Sun 
2015-02-Mon 
2015-02-Tue 
2015-02-Wed 
2015-02-Thu 
2015-02-Fri 
2015-02-Sat 
and so on 

有人能幫我嗎?

+0

感謝您試用@ lad2025。它得到的月份有序,但不是太陽,星期一等。SOme改進了原來的一個。謝謝 – usert4jju7

回答

0

你爲什麼要使用concat()語句時MySQL有date_format()您可以使用EVE_DATE列在查詢

SELECT 
     CONCAT(YEAR(EVE_DATE),'-',MONTH(EVE_DATE),'-',DAYNAME(EVE_DATE)) AS WEEKDAY_DATE, 
     SUM(EVE_OCCUR) 
FROM 
     TABLE 
    WHERE 
     EVE_DATE BETWEEN '2015-01-01' AND '2015-10-31' 
    GROUP BY 
      WEEKDAY_DATE 
    ORDER BY YEAR(EVE_DATE),MONTH(EVE_DATE) ,FIELD(DAYNAME(EVE_DATE), 'MONDAY', 'TUESDAY', 'WEDNESDAY', 'THURSDAY', 'FRIDAY', 'SATURDAY', 'SUNDAY'); 
+0

謝謝Shankar。輸出按年份和月份排序。我仍然失蹤太陽,星期一,星期二..星期六。當前輸出按字母順序排列星期幾名稱 – usert4jju7

+0

@ usert4jju7您能否給我更多詳細信息,我們按日期排序,理想情況下它應該會生成您需要的輸出,(2015-01-02(日) 2015-01-03( - 週一)),產出將爲2015-01-Sun,2015-01-Mon – Shankar

+0

我現在得到的產出是2015-01-Tue,2015-01-Thu,2015-01-Fri,2015-01-Sat,2015 -01-太陽,2015-01-週一然後相同的月02,03等。這很棒。輸出按年份排序,然後按月排序。最後一點我想補充命令爲2015-01-Mon,2015-01-Tue,2015-01-Wed,2015-01-Thu,2015-01-Fri,2015-01-Sat,2015 -01-的太陽。你能幫我最後一點嗎?就像在這裏 - http://stackoverflow.com/questions/1126961/order-by-day-of-week-in-mysql - ORDER BY(case DAYOFWEEK(dateField)WHEN 1 THEN 8 else DAYOFWEEK(dateField)END) – usert4jju7

1

您可以通過EVE_DATE訂購:

SELECT 
    CONCAT(YEAR(EVE_DATE),'-',MONTH(EVE_DATE),'-',DAYNAME(EVE_DATE)) AS WEEKDAY_DATE, 
    SUM(EVE_OCCUR) 
FROM TABLE 
WHERE EVE_DATE BETWEEN '2015-01-01' AND '2015-10-31' 
GROUP BY WEEKDAY_DATE 
ORDER BY EVE_DATE 

SqlFiddleDemo

編輯:

例子就是我想要的意見交流:

2015-01-01 - Thursday  -- 4th 
2015-01-02 - Friday  -- 5th 
2015-01-03 - Saturday  -- 6th 
2015-01-04 - Sunday  -- 7th 
2015-01-05 - Monay  -- should it be the first 
2015-01-06 - Tuesday  -- 2nd 
2015-01-07 - Wednesday -- 3rd 
2015-01-08 - Thurday  
2015-01-09 - Friday 
2015-01-10 - Saturday 
2015-01-11 - Sunday 
2015-01-12 - Monday  -- 8th 

當您按日期排序時,按實際日期排序而不是文本表示

現在你想從Monady開始,但週一在今年/月不存在作爲起點。你想洗牌Monady嗎?你對我的建議是無稽之談。

+0

@ usert4jju7看demo.I不明白你的意思:''得到月份,但不是太陽,星期一''它們是按順序升序 – lad2025

+0

這肯定比我以前得到的結果要好。我現在想念的是太陽,星期一,星期二......星期六。我怎麼能按照這個順序排序呢? – usert4jju7

+0

@ usert4jju7我仍然沒有讓你的觀點顯示你的實際數據。看到我按日期排序並僅將WEEK_DATE用作演示文稿。排序基於日期而不是字符串 – lad2025

1

輸出排序?

SELECT DATE_FORMAT(eve_date, '%Y-%m-%a') as weekday_date, 
     SUM(EVE_OCCUR) 
FROM TABLE 
WHERE eve_date >= '2015-01-01' AND eve_date < '2015-02-01' 
GROUP BY WEEKDAY_DATE 
ORDER BY MIN(eve_date); 

對於ORDER BY,我會建議使用聚合函數,而不是ORDER BY eve_date。這與標準SQL的工作方式一致。

我還更改了日期比較以使用>=<BETWEEN是帶日期的危險習慣,因爲在有時間分量時它的工作方式不同。上述方法對於日期和日期/時間同樣適用。

+0

謝謝戈登。感謝你的幫助。 – usert4jju7