2017-10-31 1 views
0

다음 구조의 테이블이 있습니다. 내가 필요로 무엇다른 필드에 의해 데이터베이스에서 DISTINCT 행 선택

enter image description here

는 DISTINCT personal_id와 테이블에서 행을 선택하는 것입니다,하지만 주문이나 타임 스탬프를 감소합니다. 그래서 ORDER BY을 시도했는데 쿼리는 다음과 같이 보입니다. 이 쿼리의 SELECT 부분에 없었기 때문에 obviosuly 내가 타임 스탬프의 순서에 따라 행을 주문할 수 없기 때문에

SELECT DISTINCT personal_id 
FROM comment_ballon 
WHERE ballon_id= ? 
    and timestamp >=? 
ORDER BY timestamp DESC 

그러나 나는 그것을 할 수 없었다. 그래서 나는 일종의 타임 스탬프 부분을 쿼리에 추가했으며 예상대로 DISTINCT 부분을 엉망으로 만들었습니다 (타임 스탬프가 모두 고유했기 때문에 모든 행이 반환되었습니다).

그룹별로 사용하려고했으나 DESAM 주문 타임 스탬프가 엉망이되었습니다.

SELECT personal_id, timestamp 
FROM comment_ballon 
WHERE ballon_id = ? 
    and timestamp >= ? 
GROUP BY personal_id 
ORDER BY timestamp DESC 

어떻게이를 수, DESC 타임 스탬프의 순서에 의해, 고유의 personal_ids에 따라 행을 선택하지만, 같은 시간에 의해?

+0

'personal_id'가 같은 다른 행에는 * 다른 *'timestamp' 값이있을 수 있습니다. * * 타임 스탬프는 주문에 사용됩니까? –

답변

3
SELECT personal_id, max(timestamp) as latest 
FROM comment_ballon 
WHERE ballon_id=? and timestamp>=? 
group by personal_id 
ORDER BY latest DESC 

id 및 get max timestamp로 그룹화 할 수 있습니다. 최대 타임 스탬프에 의한 순서

1

어때?

이 작동
select personal_id, timestamp 
from 
(
select personal_id, min(timestamp) as timestamp 
from comment_ballon WHERE ballon_id=? and timestamp>=? 
group by personal_id 
) as a 
order by timestamp desc 
+0

나는 당신이 쿼리에서 max (timestamp)와 min (timestamp)가 아니라고 생각했다. –

+0

@aiswaryakrishna - 어떤 * 타임 스탬프 값을 사용해야한다고 말한 적이 없기 때문에,'min()'은'max()'와 같은 좋은 추측이었습니다. –

0

, 바이올린을 확인 : 그것은 MySQL의 5.6을 사용하고

http://sqlfiddle.com/#!9/65a79/2

, 다른 RDBMS와 다를 수 있지만 MySQL은 같은 질문을 태그 할 수 있습니다.

+0

더 명확하고 이해하기 쉬운 예제를 원한다면 임의의 ID 대신 고유 한 ID를 추가 할 수 있습니다. –

+0

답안에 * 실제 코드 *를 포함하십시오. sqlfiddle이 작동하지 않거나 모두 누락되거나 거기에서 코드를 정리하고 제거하면 향후 독자에게 대답은 쓸모 없게됩니다. –

관련 문제