这是一个示例数据文件
数据包含多个时间戳上具有不同纬度和经度的唯一ID。我想为每个唯一ID选择最近30天的坐标行。请帮助我运行查询。此日期在Hive表中
关于, 阿克沙伊
答案 0 :(得分:1)
根据上面的示例(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
答案 1 :(得分:0)
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, -30, getdate())
group by ID;
答案 2 :(得分:0)
在Oracle中,它将是:
SELECT * FROM TEST_DATE1
WHERE DATEUPDT > SYSDATE - 30;