2017-12-20 14 views
0

그룹별로 사용할 수있는 데이터 세트가 있습니다.MySQL을 그룹별로 가져 오기 값과 우선 순위가 같음

예를 eventTable 가능한 경우 내가 바람직 null 값을 얻을합니다 (이벤트가 완료되지 않은 경우 알고 싶어) :

ID event finished 
1 event1 2017-01-01 
2 event2 NULL 
3 event3 2017-05-18 
4 event1 NULL 

SQL :

:

SELECT event, max(finished) FROM eventTable group by event 

원치 않는 결과를 제공

event1 2017-01-01 
event2 NULL 
event3 2017-05-18 

결과가 좋음 (event1에 NULL 값 참조) :

event1 NULL 
event2 NULL 
event3 2017-05-18 

의견이 있으십니까? 고맙습니다.

답변

2

일 최대를 보여이는 null 존재 null를 보여 주면 당신은 확인하기 위해 조건부 집계를 사용할 수 있습니다

SELECT event, 
case when sum(finished is null) > 0 
    then null else max(finished) 
end as finished 
FROM eventTable 
group by event 

DEMO

+1

아주 좋은 해결책이지만, "sum (finished is NULL)> 0"이라고 써야한다고 생각합니다. –

+0

@DanielE. 의미 상 둘 다 동일하지만 독자가 더 읽기 쉽습니다. –

+0

완료되면 귀하의 사례가 두 번 이상 null입니까? –

0

MAX 대신 MIN을 사용하십시오. 보십시오이 -

SELECT event 
     ,min(finished) 
FROM eventTable 
GROUP BY event 
+0

분은 max와 동일한 결과를 제공합니다. 가능한 경우이 집합은 null 값을 선호하지 않습니다. – jir

1

를 사용하여 미래의 일부 날짜 :

SELECT event, max(ifnull(finished, '2999-01-01')) 
FROM eventTable 
group by event ; 
관련 문제