【发布时间】:2013-10-16 15:27:48
【问题描述】:
我尝试使用此查询获取表的最后一行和下一行:
SELECT TOP 1 Nummer FROM Empfänger WHERE Nummer < 4748 ORDER BY Nummer DESC
UNION
SELECT TOP 2 Nummer FROM Empfänger WHERE Nummer >= 4748 ORDER BY Nummer ASC;
主键“Nummer”是唯一且自增的,所以有
4747, 4748, 4749
恕我直言,它应该返回上述数字,而是返回:
4747, 4798, 4799
当我使用 Access 打开数据库并在“之间”设置过滤器时,值会正确显示。
我把语句改成:
SELECT DISTINCT TOP 1 Nummer FROM Empfänger WHERE Nummer < 4748 ORDER BY Nummer DESC
UNION
SELECT DISTINCT Nummer FROM Empfänger WHERE Nummer = 4748
UNION
SELECT DISTINCT TOP 1 Nummer FROM Empfänger WHERE Nummer > 4748 ORDER BY Nummer ASC;
这几乎完美无缺。
4747, 4748, 4750
当我在单个查询中编写每个语句时,它会返回正确的值...
SELECT DISTINCT TOP 1 Nummer FROM Empfänger WHERE Nummer < 4748 ORDER BY Nummer DESC
= 4747
SELECT DISTINCT Nummer FROM Empfänger WHERE Nummer = 4748
= 4748
SELECT DISTINCT TOP 1 Nummer FROM Empfänger WHERE Nummer > 4748 ORDER BY Nummer ASC;
= 4749
\
SELECT DISTINCT TOP 1 Nummer FROM Empfänger WHERE Nummer < 4750 ORDER BY Nummer DESC
UNION
SELECT DISTINCT Nummer FROM Empfänger WHERE Nummer = 4750
UNION
SELECT DISTINCT TOP 1 Nummer FROM Empfänger WHERE Nummer > 4750 ORDER BY Nummer ASC;
我再次检查了一下,突然上面显示的查询起作用了。 感谢您的帮助。
【问题讨论】:
-
您使用的是哪个 DBMS?
TOP n子句是否在您的 DBMS 中的order by之前应用?检查文档! -
我使用 Access 2007,但数据库最初是用 Access 1997 编写的。我相信 Order by 子句应用在 TOP 子句之后。