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

axzmvihb  于 2021-06-26  发布在  Hive
关注(0)|答案(6)|浏览(304)

这个问题在这里已经有答案了

sql仅选择列上具有最大值的行[重复](27个答案)
三年前关门了。
我有一个表,每个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中不起作用
谢谢

ercv8c1e

ercv8c1e1#

可以使用相关子查询(即在主查询中引用字段的子查询)来实现这一点。在这种情况下:

SELECT * 
FROM yourtable t1
WHERE date = (SELECT max(date) from yourtable WHERE id = t1.id)

在这里我们给出 yourtable 表1的别名 t1 然后在获取 max(date) 从同一张table yourtable 为了这个 id .

pb3skfrl

pb3skfrl2#

这里有一条路。内部查询获取每个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)
3xiyfsfu

3xiyfsfu3#

一种方法是:

select table.* 
from table
join 
(
    select ID, max(Date) as max_dt 
    from table
    group by ID
) t
on table.ID= t.ID and table.Date = t.max_dt

请注意,若您有多个相同id的相同日期,那个么您将在结果中得到所有这些行

h4cxqtbf

h4cxqtbf4#

可以使用连接来执行此操作

SELECT t1.* from myTable t1
LEFT OUTER JOIN myTable t2 on t2.ID=t1.ID AND t2.`Date` > t1.`Date`
WHERE t2.`Date` IS NULL;

只有每个id的最新日期为的行与t2的联接为空。

vm0i2vca

vm0i2vca5#

您是否尝试过以下方法:

SELECT ID, COUNT(*), max(date)
FROM table 
GROUP BY ID;
2guxujil

2guxujil6#

这个问题以前有人问过。请看这个问题。
使用公认的答案并根据您的问题进行调整,您会得到:

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

相关问题