背景:
分時段統計賬單報表,時間間隔為[30分鐘,1小時,2小時,4小時],對應時段為
[00:00-00:30,00:30-01:00,01:00-01:30……]
[00:00-01:00,01::00-02:00,02:00-03:00……]
[00:00-02:00,02:00-04:00,04:00-06:00……]
[00:00-04:00,04:00-08:00,08:00-12:00……]核取方塊,可多選;
查詢一段時期內資料,例如開始2017-01-01到結束2017-02-01
開始用case when、sum、group by 等聚合函式在sql查詢時總計資料,但單錶資料量在八千萬以上且不斷遞增,sql查詢耗時30多秒;
後改為sql只查詢滿足條件的賬單,分組統計放到程式中處理,sql中會用到聯合索引,此處簡寫了:
select * from table where time >= startdate and time <= enddate;
思路:先查詢出所有滿足條件資料,然後將資料分組;
用listmultimap實現:
先獲取每條資料所對應的時段,每個時段都有不同的id,以時段id為key,每一條資料為value
listlist = dao.getbilldata(startdate,enddate);
listmultimapmap= arraylistmultimap.create();
遍歷資料list
for(object obj : list){
//比較得出每條資料所屬時段的id
//todo 可用列舉類實現
map.put(id, obj);
map中的value儲存的是list,且相同id的value是遞增的(list會執行add操作)
map中已根據時段統計出所有資料,根據所選的時段的id在map中可取出對應的集合,分別統計即可;
mongodb的mapreduce分組統計
根據in time yyyy mm dd hh mm ss 字段精確到天分組,統計數量 criteria criteria criteria.where parking id is inparking.getparking id and in time gte inparking.getstart ...
Hadoop之MR簡單例子(手機號分組和統計)
按手機號的前三位劃分,相同則為一組 public class areapartitionerextends partitioner override public int getpartition key key,value value,int numpartitions public class ...
時統ptp 時統系統(時統裝置)詳細資料和介紹分享
輸入模組 l gps 輸入 接收 gps l1,c a 碼訊號 1575.42mhz,16 通道 授時精度優於 30ns rms 定位精度優於 3m rms 冷啟動 29s 熱啟動 1s l 北斗輸入 接收北斗二 b1 訊號,1561.098mhz,16 通道授時精度優於 30ns rms 定位精度...