mysql 統計本週7天的數據並分組

今天寫到項目的一個數據展現模塊,最終要呈現的效果是用柱狀圖顯示本週七天的訪客數量,因此要給前端本週7天的數據前端

好比今天是週二(實際上也是),咱們要給前端週一週二的數據,後面週三到週日由於還沒到,數據置0java

在網上找了一些相關信息,都是用sql語句直接查詢最近七天的數據的方法,這樣致使一個問題,咱們再假設今天是週二,那麼統計的就是上週二到今天的數據,然而我實際上並不須要上週的數據mysql

這裏說一下我本身的解決方法,首先咱們瞭解一下mysql的DATEDIFF方法,它會返回兩個date數據之間的天數,好比DATEDIFF('2019-8-13' , '2019-8-14'),返回的結果是1sql

因而咱們先寫一個函數ide

@Select("SELECT count(id) FROM strange_record WHERE DATEDIFF( date_format( now( ) , '%Y-%m-%d' ) , date_format( time, '%Y-%m-%d' ) ) = #{day}") int getStrangeNumBeforeSomeDays(int day);

若是參數day=1,函數將返回1天前的數據統計值函數

而後咱們獲取今天是周幾spa

public static int getWeekday(){ Date today = new Date(); Calendar c = Calendar.getInstance(); c.setTime(today); int weekday=c.get(Calendar.DAY_OF_WEEK); if(weekday==1) return 7; else return weekday-1; }

通常來講,到weekday這裏,已是java經常使用的獲取當前日期的星期數的方法了,可是java中返回的1是週日,以此類推,7是週六,按照咱們本身的習慣,我進行了一下改動,1-7分別表示週一到週日code

而後是一個簡單的數據處理orm

@Override public Map<String, Object> getStrangeNumCurWeek() { Map<String, Object> data = new HashMap<>(); for(int i=1;i<=7;i++){ data.put(String.valueOf(i),0); } int weekday = DateTimeUtil.getWeekday(); for(int i=1;i<=weekday;i++){ data.put(String.valueOf(i),monitorIndexDao.getStrangeNumBeforeSomeDays(weekday-i)); } return data; }

最後呈現的效果就是這樣的blog

相關文章
相關標籤/搜索