2011-07-03 107 views
1

我试图让他们在最接近指定日期的特定顺序列出订购一些日期mysql命令年字段:由最接近的匹配

id year 
--------- 
1 2010 
2 2011 
3 1992 
4 1996 
5 1987 
6 1988 

结果应该像(如果我指定1992年作为一年订购):

id year 
--------- 

3 1992 
4 1996 <4 away 
5 1987 <5 away 
6 1988 <6 away 
1 2010 <8 away 
2 2011 <9 away 

我想它,让它返回所有日期,但最相关(最近)在列表的首位。

对不起,我修改了我的问题,使其更清楚我试图达到什么。

+2

你的结果集是什么样的? – CResults

+2

从这个问题来看,你似乎只想'ORDER BY year'。那怎么办? –

+2

从我理解你需要SELECT * FROM表WHERE year> ='1992'ORDER BY year;但是你不会问这个问题是否很简单;) –

回答

2

这应该解决您的问题。

SELECT * 
FROM `table` 
ORDER BY ABS(1992-`year`) ASC 
+0

不必要的,如果因为使用'ABS'函数而存在(或包含)'year'字段时不太可能使用索引。 –

4

我错过了什么吗?是不是只是:

SELECT * 
FROM table 
WHERE year >= '1992' 
ORDER BY year ASC 

然后编辑我猜...

SELECT *, ABS(year - 1992) 
FROM table 
ORDER BY ABS(year-1992) ASC 

我认为,将工作

+0

第二个例子是不必要的,如果因为使用'ABS'函数而存在(或包含)'year'字段时不太可能使用索引。 –