为每个唯一ID选择最新的30个日期

问题描述

这是一个示例数据文件

dateinfo

数据包含多个时间戳上具有不同纬度和经度的唯一ID。我想为每个唯一ID选择最近30天的坐标行。请帮助我运行查询。此日期在Hive表中

关于, 阿克沙伊

解决方法

根据上面的示例(id为2,3的当前年份没有日期),您可以使用窗口函数ROW_NUMBER()为每个id编号(按降序排列)。然后只需获取最新的30个值:

--get all values for each id where num<=30 (get last 30 days for each day)
select * from
(
--numbering each date for each id order by descending
  select *,row_number()over(partition by ID order by DATE desc)num from Table
)X
where num<=30

如果每个ID仅需要获取唯一日期(不考虑时间) ,则可以尝试以下查询:

select * from
(
 --numbering date for each id
 select *,row_number()over(partition by ID order by new_date desc)num
 from
  (
   -- move duplicate using distinct
   select  distinct ID,cast(DATE as date)new_date  from Table
  )X
)Y
where num<=30
,
select * from MyTable 
where
  [Date]>=dateadd(d,-30,getdate());

要按ID分组并执行汇总,就像这样

select ID,count(*) row_count,max(Latitude) max_lat,max(Longitude) max_long
from MyTable 
where
  [Date]>=dateadd(d,getdate())
group by ID;
,

在Oracle中,它将是:

SELECT * FROM TEST_DATE1
WHERE DATEUPDT > SYSDATE - 30;

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...