2013-05-15 3 views
0

레이스 결과 테이블이 있다고 가정 해 봅니다. 표는 Date (xxxx-xx-xx의 MySql 날짜 형식), First, Second, Third, Fourth, Fifth 및 Sixth로 명명 된 상위 6 명의 피니셔 이름에 대해 각각 하나의 열로 구성된 7 개의 열로 구성됩니다. 여러 가지 결과 세트가 있고 다양한 피니셔 열에 100 가지 정도의 다른 이름이있을 수 있습니다. 피니셔 란 (첫 번째, 두 번째, 세 번째, 네 번째, 다섯 번째, 여섯 번째)에 이름이 표시된 각 사람을 이름이 표시된 최신 날짜와 함께 나열 할 수있는 쿼리가 필요합니다. 필자는 마무리 장소에 따라 별도의 결과가 필요하지 않으므로 함께 처리하는 6 개의 피니셔 열이 모두 필요합니다. 대부분의 이름은 수십 개의 서로 다른 날짜에 표시되지만 각 이름이 표시된 가장 최근의 날짜 만 필요합니다. 이상적인 결과는 가장 최근의 것부터 가장 최근의 것까지 정렬 된 각 이름과 가장 최근의 완료 날짜 목록을 생성합니다. 나는 이것을 보여주기 위해 바이올린을 만들려고했지만 어떤 이유로 든 바이올린에서 제대로 작동하는 날짜를 얻을 수 없었습니다. 어쨌든, 이것에 대한 도움을 줄 수있는 사람이라면 누구나 크게 감사 할 것입니다.단일 테이블에서 여러 열을 사용하는 복잡한 쿼리

+0

정규화가 옵션이 아닙니까? – Strawberry

답변

0
SELECT <table>.date, <table>.first as name FROM <table> GROUP BY name 
UNION DISTINCT 
SELECT <table>.date, <table>.second as name FROM <table> GROUP BY name 
UNION DISTINCT 
SELECT <table>.date, <table>.third as name FROM <table> GROUP BY name 
UNION DISTINCT 
SELECT <table>.date, <table>.fourth as name FROM <table> GROUP BY name 
UNION DISTINCT 
SELECT <table>.date, <table>.fifth as name FROM <table> GROUP BY name 
UNION DISTINCT 
SELECT <table>.date, <table>.sixth as name FROM <table> GROUP BY name 
ORDER BY date 
+0

사실, 이것은 가깝지만 일부 항목은 완전히 건너 뜁니다. 예를 들어 해당 열에 104 개의 고유 한 이름이 있지만 쿼리는 29 개의 행만 반환합니다. 각 고유 한 이름에 대해 가장 최근 날짜가있는 104 개의 행이 있어야합니다. –

+0

데이터를 설정하지 않았으므로 조정되지 않았습니다. –

+0

나는 약간의 땜질 또한했다. 나는 단지 29 행만 보여주는 것에 대해서는 틀렸어. 그건 내 실수 였어. 이 쿼리는 모든 행을 반환합니다. 예를 들어 "Tom Davis"가 결과 집합에 43 번 나타나면이 쿼리는 가장 최근의 결과를 반환하기보다는 개별 행으로 43 개 모두를 반환합니다. 가장 최근의 각 이름 만 필요합니다. 고유 한 이름에 대해 하나씩, 그리고 각 이름에 대해 가장 최근에 _ 생한 행이 104 행을 리턴해야합니다. –

0

이렇게하면 필자가 필요한 결과를 얻을 수있었습니다. 필자는 근본적으로 피니셔를 잡기 위해 "이름"을 사용했고, 6 개의 열 모두를 질의했을 때 각 "이름"에 대한 가장 최근의 표시만을 고르는 "MAX (날짜)"를 사용했습니다. 레이스 노조

SELECT name, MAX(Date) as last 
FROM (
SELECT first name,Date FROM Results 
UNION ALL 
SELECT second, Date FROM Results 
UNION ALL 
SELECT third, Date FROM Results 
UNION ALL 
SELECT fourth, Date FROM Results 
UNION ALL 
SELECT fifth, Date FROM Results 
UNION ALL 
SELECT sixth, Date FROM Results) Q 
GROUP BY name 
ORDER BY last ASC; 
0

선택 t.first에서 a.date는 (제 1 (별개의 선택)를 선택한 경주 조합부터) 구분 (제 선택한 경주 조합에서 (초) 별개 레이스 조합에서) (별개의 세번째 선택 선택 인종 조합과 별개의 (다섯 번째) 인종 차별 (여섯 번째) 인종 선택, t. 인종 a. 처음에는 (a.first, a.second, a.third, a.fourth, a.fifth, a.sixth)

관련 문제