我有两个查询返回一组赛马的结果。
表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
如果有人能提供任何帮助,我们将不胜感激。
答案 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