使用MYSQL加入两个查询并处理日期

时间:2015-10-29 04:58:56

标签: mysql sql join

我有两个查询返回一组赛马的结果。

表1中的第一个查询返回马在当前比赛之前跑的最快时间。

第二个查询返回比赛的基本细节,比如比赛号码和赛马名称。

另外两个查询工作正常,但是当我尝试加入表时,表1中的日期不同,查询开始返回马比赛的最快时间,现在包括当前的比赛。

查询1 - 它返回马跑的最快时间。

SELECT
raceref,
  date,
  horse,

  (
    SELECT min(finale)
    FROM sectional
    WHERE horse = t.horse
      AND date < t.date
    ORDER BY date DESC

  ) AS min_time

FROM sectional t
group by horse, raceref
order by raceref

查询2 - 返回比赛的基本细节。

SELECT raceref, date, horse

from
results

group by raceref, horse

这是我尝试加入。

SELECT tab2.raceref, tab2.date, tab2.horse, tab1.min_time
from
(
SELECT
raceref,
  date,
  horse,
   (
    SELECT min(finale)
    FROM sectional
    WHERE horse = t.horse
      AND date < t.date
    ORDER BY date DESC

      ) AS min_time

FROM sectional t
group by horse, raceref
order by raceref
) as tab1

inner join

    (select raceref, date, horse

from
results

group by raceref, horse
) as tab2

on tab1.horse = tab2.horse

group by horse
order by raceref;

这是输出的屏幕截图。 http://i.stack.imgur.com/hTApc.png

上面的问题是,查询现在显示了马的最小运行时间,但是我们不应该在该列中有时间,这是马匹的第一次运行。所以他们都应该是空的,直到一匹马第二次比赛。

根据我的理解,你可以在约会期间为连接添加一些条件,但是我无法找到任何可以用来满足这种情况的例子。

这是一个SQL小提琴,但只有有限的数据,所以结果不能很好地工作,但它仍然提供了一个想法。

http://sqlfiddle.com/#!9/b0d4f2/3

如果有人能提供任何帮助,我们将不胜感激。

1 个答案:

答案 0 :(得分:0)

你的查询2没有意义,但这是我的答案。

SELECT tab2.raceref
    ,tab2.DATE
    ,tab2.horse
    ,tab1.min_time
FROM (
    SELECT raceref
        ,DATE
        ,horse
        ,(
            SELECT min(finale)
            FROM sectional
            WHERE horse = t.horse
                AND DATE < t.DATE
            ORDER BY DATE DESC
            ) AS min_time
    FROM sectional t
    GROUP BY horse
        ,raceref
    ORDER BY raceref
    ) AS tab1
INNER JOIN (
    SELECT raceref
        ,DATE
        ,horse
    FROM results
    GROUP BY raceref
        ,horse
    ) AS tab2 
ON tab1.horse = tab2.horse
AND tab1.DATE = tab2.DATE   <= i think you only miss this 
ORDER BY raceref;

但我觉得如果你只使用raceref也就够了

ON tab1.raceref = tab2.raceref