全部版块 我的主页
论坛 提问 悬赏 求职 新闻 读书 功能一区 悬赏大厅 求助成功区
1173 9
2020-04-24
悬赏 200 个论坛币 已解决
表名:test字段:ID、vin、time、mile、
表样例:
ID          Vin            time                         mile
1                a          2019-04-01 08:00:00            40
1            a          2019-04-01 08:00:00            40
2            a          2019-04-01 17:00:00            30
3            b          2019-04-02 09:00:00            50
4            b          2019-04-02 14:30:57            50
5            b          2019-04-03 07:10:10            50
6            c          2019-04-01 00:00:00            20
......



1、查询语句出错

因为表里出现重复数据条,所以要先去重;最终的目的是得出每个vin的每天平均mile。

time 的格式是年月日时分秒,例如,2019-04-01 00:00:00



select vin, avg(day_distance) as daily_distance from(

   select vin, date, sum(mile) as day_distance from(

      select vin, substr(time,1,10) as date, mile from (

          select distinct(id), vin, time, mile  from test where  time BETWEEN '2019-04-01 00:00:00' AND '2019-06-31 00:00:00') a group by id ) b group by vin, date) c group by vin;


执行以上查询语句后,会出错,求助



2、还是这张表,需要得出每个vin的每周平均出行天数或者每七天平均出行天数,求助



最佳答案

鸦鸦林 查看完整内容

hadoop最接近SQL的 数据就是 Hive 了。 那就是一下 select vin,weekofyear(time) as weeks,count(time) as weekly_out_cnt, count(time)/7 as avg_weekly_out from (select distinct id,vin,time,mile from test where time BETWEEN '2019-04-01 00:00:00' AND '2019-06-31 00:00:00) a group by vin,weekofyear(time)
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2020-4-24 16:05:23
zwj1012 发表于 2020-4-26 16:21
客户端用的是DBeaver,连接的数据库是Hadoop,是SQL语言啊
hadoop最接近SQL的 数据就是 Hive 了。 那就是一下


select vin,weekofyear(time) as weeks,count(time) as weekly_out_cnt, count(time)/7 as avg_weekly_out
from
(select distinct id,vin,time,mile from test where time BETWEEN '2019-04-01 00:00:00' AND '2019-06-31 00:00:00) a
group by vin,weekofyear(time)
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2020-4-25 22:44:59
答案1:
select vin,substr(time,1,10) as time,avg(mile) as avg_mile from (select distinct id,vin,time,mile from test where time BETWEEN '2019-04-01 00:00:00' AND '2019-06-31 00:00:00) a
group by vin,substr(time,1,10)

答案2(假设你是mysql,就用week function 区分周期 :
select vin,week(time) as weeks,count(time) as weekly_out_cnt, count(time)/7 as avg_weekly_out
from
(select distinct id,vin,time,mile from test where time BETWEEN '2019-04-01 00:00:00' AND '2019-06-31 00:00:00) a
group by vin,week(time)
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2020-4-26 10:58:23
鸦鸦林 发表于 2020-4-25 22:44
答案1:
select vin,substr(time,1,10) as time,avg(mile) as avg_mile from (select distinct id,vin,tim ...
感谢你的回答。
第一个问题我已解决。

第二个问题,我这个应该不是mysql,没有week的命令,有点头大。。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2020-4-26 15:56:25
zwj1012 发表于 2020-4-26 10:58
感谢你的回答。
第一个问题我已解决。
是什么 language?
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2020-4-26 16:21:07
鸦鸦林 发表于 2020-4-26 15:56
是什么 language?
客户端用的是DBeaver,连接的数据库是Hadoop,是SQL语言啊
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

点击查看更多内容…
相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群