SELECT a.phoneNo,a.device device001,a.`time` AS time001,a.mac mac001,a.qq qq001 ,
b.device device002,b.`time` AS time002,b.mac mac002,b.qq qq003 ,c.device device003,
c.`time` AS time003,c.mac mac003,c.qq qq003
FROM
(SELECT phoneNo,device,`time`,DATE(`time`) data_date,mac,qq FROM table_test WHERE `time` >= '2019-07-09' AND `time` < DATE_ADD('2019-07-09',INTERVAL 1 DAY)
AND device = 'device001') a,
(SELECT phoneNo,device,`time`,DATE(`time`) data_date,mac,qq FROM table_test WHERE `time` >= '2019-07-09' AND `time` < DATE_ADD('2019-07-09',INTERVAL 1 DAY)
AND device = 'device002') b,
(SELECT phoneNo,device,`time`,DATE(`time`) data_date,mac,qq FROM table_test WHERE `time` >= '2019-07-09' AND `time` < DATE_ADD('2019-07-09',INTERVAL 1 DAY)
AND device = 'device003') c
WHERE a.phoneNo = b.phoneNo AND b.phoneNo = c.phoneNo AND a.phoneNo = c.phoneNo
AND a.data_date = b.data_date AND b.data_date = c.data_date AND a.data_date = c.data_date;
然后用取標為1的資料關聯 設備3所有的資料
跟上面一樣 使用case when 打標 同一天并且設備2時間<小于設備3 為1 其他為0
最后 你再拿出所有上面打標為1 的資料 按照手機號 分組統計
uj5u.com熱心網友回復:
不想寫sql啊 ,思路給你了 ,有問題再找我
uj5u.com熱心網友回復:
不想寫sql啊 ,思路給你了 ,有問題再找我
select distinct n.DiscoverMacAddr,m.cnt from
(select t1.DiscoverMacAddr,
(case when t1.StartTime< t2.StartTime and t2.StartTime< t3.StartTime then 1 ELSE 0 end ) flag
from
( select * from wifiuserdata where StartTime between '2019-05-28 08:20:22' and '2020-03-22 04:22:40'
and DeviceID ='ipcarma176' )t1,
( select * from wifiuserdata where StartTime between '2019-05-28 08:20:22' and '2020-03-22 04:22:40'
and DeviceID ='ipcarma177' )t2,
( select * from wifiuserdata where StartTime between '2019-05-28 08:20:22' and '2020-03-22 04:22:40'
and DeviceID ='ipcarma178' )t3
where t1.DiscoverMacAddr=t2.DiscoverMacAddr and t2.DiscoverMacAddr=t3.DiscoverMacAddr )n
left join
(select DiscoverMacAddr,count(1) cnt from wifiuserdata where StartTime between '2019-05-28 08:20:22' and '2020-03-22 04:22:40'
and DeviceID in('ipcarma176','ipcarma177','ipcarma178') group by DiscoverMacAddr) m
on m.DiscoverMacAddr=n.DiscoverMacAddr where n.flag=1 ;
sql 的話大致是這么寫。但是發現用的資料庫不支持子查詢,只能查詢出來去代碼中計算,
Map<String,List<DeviceInfo>> listMap = list.stream().collect(Collectors.groupingBy(DeviceInfo:: getPhone));
分解成 手機號 和 List的形式,接下去怎么通過 deviceId 的順序 判斷是否存在相應的采集時間。
uj5u.com熱心網友回復:
不想寫sql啊 ,思路給你了 ,有問題再找我
select distinct n.DiscoverMacAddr,m.cnt from
(select t1.DiscoverMacAddr,
(case when t1.StartTime< t2.StartTime and t2.StartTime< t3.StartTime then 1 ELSE 0 end ) flag
from
( select * from wifiuserdata where StartTime between '2019-05-28 08:20:22' and '2020-03-22 04:22:40'
and DeviceID ='ipcarma176' )t1,
( select * from wifiuserdata where StartTime between '2019-05-28 08:20:22' and '2020-03-22 04:22:40'
and DeviceID ='ipcarma177' )t2,
( select * from wifiuserdata where StartTime between '2019-05-28 08:20:22' and '2020-03-22 04:22:40'
and DeviceID ='ipcarma178' )t3
where t1.DiscoverMacAddr=t2.DiscoverMacAddr and t2.DiscoverMacAddr=t3.DiscoverMacAddr )n
left join
(select DiscoverMacAddr,count(1) cnt from wifiuserdata where StartTime between '2019-05-28 08:20:22' and '2020-03-22 04:22:40'
and DeviceID in('ipcarma176','ipcarma177','ipcarma178') group by DiscoverMacAddr) m
on m.DiscoverMacAddr=n.DiscoverMacAddr where n.flag=1 ;
sql 的話大致是這么寫。但是發現用的資料庫不支持子查詢,只能查詢出來去代碼中計算,
Map<String,List<DeviceInfo>> listMap = list.stream().collect(Collectors.groupingBy(DeviceInfo:: getPhone));
分解成 手機號 和 List的形式,接下去怎么通過 deviceId 的順序 判斷是否存在相應的采集時間。
create table database.tmp_a as
select
t.*
from
(select
t1.*,
t2.StartTime time_2,
case when t2.StartTime>t1.StartTime and substr(t2.StartTime,0,10)=substr(t1.StartTime,0,10) then '1'
else '0'
end is_order
from
( select * from wifiuserdata where StartTime between '2019-05-28 08:20:22' and '2020-03-22 04:22:40'
and DeviceID ='ipcarma176' )t1
left join
( select * from wifiuserdata where StartTime between '2019-05-28 08:20:22' and '2020-03-22 04:22:40'
and DeviceID ='ipcarma177' )t2
on t1.DiscoverMacAddr=t2.DiscoverMacAddr
) t
where t.is_order='1';
select
t.DiscoverMacAddr,
count(1)
from
(select
t1.*,
case when t1.time_2>t3.StartTime and substr(t1.time_2,0,10)=substr(t3.StartTime,0,10) then '1'
else '0'
end is_order_1
database.tmp_a t1
left join
( select * from wifiuserdata where StartTime between '2019-05-28 08:20:22' and '2020-03-22 04:22:40'
and DeviceID ='ipcarma178' )t3
on t1.DiscoverMacAddr=t3.DiscoverMacAddr
) t
where t.is_order_1='1'
;
**桔妹導讀:**深耕人工智能領域,致力于探索AI讓出行更美好的滴滴AI Labs再次斬獲國際大獎,這次獲獎的專案是什么呢?一起來看看詳細報道吧! 近日,由國際計算語言學協會ACL(The Association for Computational Linguistics)舉辦的世界最具影響力的機器 ......
我們經常在資料庫中使用 LIKE 運算子來完成對資料的模糊搜索,LIKE 運算子用于在 WHERE 子句中搜索列中的指定模式。 如果需要查找客戶表中所有姓氏是“張”的資料,可以使用下面的 SQL 陳述句: SELECT * FROM Customer WHERE Name LIKE '張%' 如果需要 ......
關于MySQL的二進制日志(binlog),我們都知道二進制日志(binlog)非常重要,尤其當你需要point to point災難恢復的時侯,所以我們要對其進行備份。關于二進制日志(binlog)的備份,可以基于flush logs方式先切換binlog,然后拷貝&壓縮到到遠程服務器或本地服務器 ......