在sql中选择每个ID的最新日期重复多次的行

新手上路,请多包涵

我有一个表,其中每个 ID 重复 3 次。每行中的每个 id 前面都有一个日期。

我想为日期最新的每个 ID 选择整行。此表中共有 370 列,我希望在选择该行时选择所有列。

样本 -

 ID   Name    Date        Marks    ..    ..  ..
1     XY     4/3/2017     27
1     fv     4/3/2014     98
1     jk     4/3/2016     09
2     RF     4/12/2015    87
2     kk     4/3/2009     56
2     PP     4/3/2011     76
3     ee     4/3/2001     12
3     ppp    4/3/2003     09
3     lll    4/3/2011     23

答案应该是

ID   Name    Date        Marks    ..    ..  ..
1     XY     4/3/2017     27
2     RF     4/12/2015    87
3     lll    4/3/2011     23

我正在尝试如下 -

 select distinct ID,*,max(date) as maxdate from table

我也在 Hive 中尝试这个。所以不确定是否某些 sql 函数在 Hive 中不起作用

谢谢

原文由 Earthshaker 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 576
2 个回答

这个问题以前有人问过。请看 这个 问题。

使用接受的答案并根据您的问题进行调整,您会得到:

 SELECT tt.*
FROM myTable tt
INNER JOIN
    (SELECT ID, MAX(Date) AS MaxDateTime
    FROM myTable
    GROUP BY ID) groupedtt
ON tt.ID = groupedtt.ID
AND tt.Date = groupedtt.MaxDateTime

原文由 ecarlin 发布,翻译遵循 CC BY-SA 3.0 许可协议

这是一种方法。内部查询获取每个 id 的最大日期。然后您可以将其加入主表以获取匹配的行。

 select
*
from
<your table>
inner join
(select id, max(<date col> as max_date) m
where yourtable.id = m.id
and yourtable.datecolumn = m.max_date)

原文由 Andrew 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题