在单个表中使用多列的复杂查询

时间:2013-05-15 22:34:39

标签: mysql date union

假设我有一张比赛结果表。该表由七列组成,如下所示:日期(MyXql日期格式为xxxx-xx-xx),以及一个列,分别为名为First,Second,Third,Fourth,Fifth和Six的前六名的名称。我有几组结果,在各种修整机列中可能有100个左右的不同名称。我需要一个查询,允许我列出名字出现在任何一个终结者列(第一,第二,第三,第四,第五,第六)的每个人以及他们的名字出现的最近日期。我不需要基于完成位置的单独结果,所以我需要将所有六个整理器列集中在一起。大多数名称将出现在几十个不同的日期,但我只需要每个名称出现的最新日期。理想情况下,结果会生成每个名称的列表及其最近的完成日期,从最近到最近排序。我试图创造一个小提琴来证明这一点,但无论出于何种原因,我都无法在小提琴中正确地使用日期。无论如何,任何能够为此提供一丝帮助的人都将不胜感激。

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

这给了我正确的结果。我基本上只是使用“name”来捕获终结者,并且“MAX(Date)as last”在我查询所有六列时仅选择每个“name”的最新显示。

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;

答案 2 :(得分:0)

选择t.first,a.date from(select distinct(first)from race union select distinct(second)from race union select distinct(third)from race union select distinct(fourth)from race union select distinct(5th)从种族联盟中选择不同的(第六种)来自种族)作为t,在第一个(第一个,第二个,第三个,第四个,第五个,第五个)中的第一个地方比赛