如何选择最接近的值小于'目标'值?

时间:2015-02-13 21:04:37

标签: mysql

我正在尝试过滤历史性的Betfair数据。 我想为FULL_DESCRIPTION中的每个项目获取一条记录。 我正在使用的SQL为每个项目提供了几条记录,每条记录都有不同的LATEST_TAKEN。 已经过滤LATEST_TAKEN以提供小于DT ACTUAL_OFF的值(两者都是日期/时间)。 我查看了其他帖子,但我的能力水平与我的热情不符。

我目前正在使用:

SELECT Bfinf_other_150126to150201_150204124439.*
FROM Bfinf_other_150126to150201_150204124439
WHERE (((Bfinf_other_150126to150201_150204124439.FULL_DESCRIPTION) Like "English Soccer/Barclays Premier League*") 
    AND ((Bfinf_other_150126to150201_150204124439.LATEST_TAKEN) < [DT ACTUAL_OFF]) 
    AND ((Bfinf_other_150126to150201_150204124439.SPORTS_ID)="1") 
    AND ((Bfinf_other_150126to150201_150204124439.EVENT)="Correct Score") 
    AND ((Bfinf_other_150126to150201_150204124439.IN_PLAY)="pe"))
ORDER BY Bfinf_other_150126to150201_150204124439.EVENT_ID, Bfinf_other_150126to150201_150204124439.FULL_DESCRIPTION, Bfinf_other_150126to150201_150204124439.SELECTION, Bfinf_other_150126to150201_150204124439.LATEST_TAKEN DESC;

这使我每个项目有多个记录,而我只想要LATEST_TAKEN值最接近DT ACTUAL_OFF的记录

1 个答案:

答案 0 :(得分:0)

所以接受你的查询,我只是改变了ORDER BY子句中的顺序,所以LATEST_TAKEN是第一个排序参数。然后我添加了一个LIMIT 1,所以它只返回一个结果。我认为这应该归还你正在寻找的东西

SELECT
    Bfinf_other_150126to150201_150204124439.*
FROM
    Bfinf_other_150126to150201_150204124439
WHERE
    (((Bfinf_other_150126to150201_150204124439.FULL_DESCRIPTION) Like "English Soccer/Barclays Premier League*") AND
    ((Bfinf_other_150126to150201_150204124439.LATEST_TAKEN)<[DT ACTUAL_OFF]) AND
    ((Bfinf_other_150126to150201_150204124439.SPORTS_ID)="1") AND
    ((Bfinf_other_150126to150201_150204124439.EVENT)="Correct Score") AND
    ((Bfinf_other_150126to150201_150204124439.IN_PLAY)="pe"))
ORDER BY
    Bfinf_other_150126to150201_150204124439.LATEST_TAKEN DESC,
    Bfinf_other_150126to150201_150204124439.EVENT_ID,
    Bfinf_other_150126to150201_150204124439.FULL_DESCRIPTION,
    Bfinf_other_150126to150201_150204124439.SELECTION
LIMIT 1;

为了清晰起见,我简化了事项:

SELECT   
Bfinf_other_150126to150201_150204124439.FULL_DESCRIPTION, Bfinf_other_150126to150201_150204124439.SELECTION, Bfinf_other_150126to150201_150204124439.ODDS, Bfinf_other_150126to150201_150204124439.LATEST_TAKEN
FROM Bfinf_other_150126to150201_150204124439   
WHERE   
(((Bfinf_other_150126to150201_150204124439.SPORTS_ID)="1") AND ((Bfinf_other_150126to150201_150204124439.EVENT)="Correct Score") AND ((Bfinf_other_150126to150201_150204124439.IN_PLAY)="pe") AND ((Bfinf_other_150126to150201_150204124439.FULL_DESCRIPTION) Like "English Soccer/Barclays Premier League*") AND ((Bfinf_other_150126to150201_150204124439.LATEST_TAKEN)<[DT ACTUAL_OFF]))  
ORDER BY    
Bfinf_other_150126to150201_150204124439.EVENT_ID, Bfinf_other_150126to150201_150204124439.FULL_DESCRIPTION, Bfinf_other_150126to150201_150204124439.SELECTION, Bfinf_other_150126to150201_150204124439.LATEST_TAKEN DESC; 

给出:

FULL_DESCRIPTION - 选择 - ODDS - LATEST_TAKEN

英格兰足球/巴克莱英超联赛/赛程1月31日/赫尔对纽卡斯尔0 - 0 9.2 31-01-2015 12:34:52

英格兰足球/巴克莱英超联赛/赛程1月31日/赫尔对纽卡斯尔0 - 0 9.8 28-01-2015 03:09:13

英格兰足球/巴克莱英超联赛/赛程1月31日/赫尔对纽卡斯尔0 - 0 10.5 25-01-2015 19:19:35

英格兰足球/巴克莱英超联赛/赛程1月31日/赫尔对纽卡斯尔0 - 0 9.4 24-01-2015 11:51:58

英格兰足球/巴克莱英超联赛/赛程1月31日/赫尔对纽卡斯尔0 - 1 9.2 31-01-2015 12:45:05

英格兰足球/巴克莱英超联赛/赛程1月31日/赫尔对纽卡斯尔0 - 1 9.6 31-01-2015 12:00:57

英格兰足球/巴克莱英超联赛/赛程1月31日/赫尔对纽卡斯尔0 - 1 9 31-01-2015 11:50:25

英格兰足球/巴克莱英超联赛/赛程1月31日/赫尔对纽卡斯尔0 - 1 8.8 30-01-2015 18:26:06

英格兰足球/巴克莱英超联赛/赛程1月31日/赫尔对纽卡斯尔0 - 2 16 31-01-2015 12:45:05

英格兰足球/巴克莱英超联赛/赛程1月31日/赫尔对纽卡斯尔0 - 2 16.5 31-01-2015 12:43:22

我需要第1,5和9行 I.E.对于每场比赛(FULL_DESCRIPTION),在比赛开始前的最长时间(LATEST_TAKEN)正确得分(SELECTION)ODDS([DT ACTUAL_OFF]。