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


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

比如今天是周二(實際上也是),我們要給前端周一周二的數據,后面周三到周日因為還沒到,數據置0

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

這里說一下我自己的解決方法,首先我們了解一下mysql的DATEDIFF方法,它會返回兩個date數據之間的天數,比如DATEDIFF('2019-8-13' , '2019-8-14'),返回的結果是1

於是我們先寫一個函數

@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天前的數據統計值

然后我們獲取今天是周幾

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分別表示周一到周日

然后是一個簡單的數據處理

@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;
    }

最后呈現的效果就是這樣的

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM