我有一个表,每个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
Run Code Online (Sandbox Code Playgroud)
答案应该是
ID Name Date Marks .. .. ..
1 XY 4/3/2017 27
2 RF 4/12/2015 87
3 lll 4/3/2011 23
Run Code Online (Sandbox Code Playgroud)
我正在尝试如下 -
select distinct ID,*,max(date) as maxdate from table
Run Code Online (Sandbox Code Playgroud)
我也是在Hive中尝试这个.所以不确定某些sql函数是否在Hive中不起作用
谢谢
eca*_*lin 26
之前已经问过这个问题.请看这个问题.
使用接受的答案并根据您的问题进行调整,您将获得:
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
Run Code Online (Sandbox Code Playgroud)
一种方法是:
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
Run Code Online (Sandbox Code Playgroud)
请注意,如果您有多个相同 ID 的同样更高的日期,那么您将在结果中获得所有这些行
您可以使用相关子查询(即引用主查询中的字段的子查询)来执行此操作。在这种情况下:
SELECT *
FROM yourtable t1
WHERE date = (SELECT max(date) from yourtable WHERE id = t1.id)
Run Code Online (Sandbox Code Playgroud)
在这里,我们为该表指定yourtable一个别名t1,然后在子查询中使用该别名,max(date)从同一个表中yourtable获取该别名id。
您可以使用联接来执行此操作
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;
Run Code Online (Sandbox Code Playgroud)
只有每个 ID 具有最新日期的行才具有与 t2 的 NULL 连接。
| 归档时间: |
|
| 查看次数: |
56533 次 |
| 最近记录: |