bestsource

각 ID에 대해 최신 날짜가 여러 번 반복되는 SQL에서 행 선택

bestsource 2023. 9. 26. 22:26
반응형

각 ID에 대해 최신 날짜가 여러 번 반복되는 SQL에서 행 선택

각 ID가 3번 반복되는 테이블이 있습니다.각 행의 각 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

또한 나는 이것을 하이브에서 시도하고 있습니다. 그래서 일부 sql 기능이 하이브에서 작동하지 않는지 잘 모르겠습니다.

감사해요.

이 질문은 이전에 질문 받은 적이 있습니다. 질문을 보세요.

수락한 답변을 사용하여 문제에 맞게 조정하면 다음과 같은 이점을 얻을 수 있습니다.

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

한가지 방법은:

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에 대해 동일하게 높은 날짜가 여러 개 있는 경우, 모든 행이 결과로 나타납니다.

상관된 하위 쿼리(주 쿼리의 필드를 참조하는 하위 쿼리)를 사용하여 이 작업을 수행할 수 있습니다.이 경우:

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

자, 우리는 다음과 같이 말합니다.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;

각 ID의 최신 날짜를 가진 행만 t2에 NULL 조인을 합니다.

한가지 방법이 있습니다.내부 쿼리는 각 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)

다음을 시도해 보셨습니까?

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

언급URL : https://stackoverflow.com/questions/45381743/select-rows-in-sql-with-latest-date-for-each-id-repeated-multiple-times

반응형