MS Access SQL - 选择早于指定日期时间的指定行数

时间:2012-02-21 10:17:49

标签: c# sql ms-access

我在C#应用程序中使用MS Access .mdb数据库。该数据库包含电子邮件消息(一行 - 一条消息)。

我需要获取超过指定日期时间的指定数量的消息。比方说,2012-02-01 12:00:00之前有30条消息。我尝试了不同的查询,但所有这些都给了我错误。还尝试了TOP,LIMIT等声明:

"SELECT * FROM ( SELECT * FROM Mails WHERE (timeReceived < ?) )  LIMIT 0,30";

"SELECT * FROM Mails WHERE (timeReceived = ?) ORDER BY timeReceived DESC LIMIT ?";

任何提示都适用。

3 个答案:

答案 0 :(得分:2)

你说你已经尝试过TOP子句,但它应该可行

SELECT TOP 30 * FROM Mails WHERE timeReceived  < '2012-02-01 12:00:00' ORDER BY timeReceived DESC

您必须考虑this

  

top指令不返回前n项,因为很容易引导   相信。相反,它返回至少n个不同的项目   结果的排序。

修改以澄清:

SELECT TOP 25
FirstName, LastName
FROM Students
WHERE GraduationYear = 2003
ORDER BY GradePointAverage DESC;

http://office.microsoft.com/en-us/access-help/results.aspx?qu=top&ex=1&origin=HA010256402

  

TOP谓词不会在相等的值之间进行选择。在里面   前面的例子,如果是第二十五和第二十六最高等级   点数平均值相同,查询将返回26条记录。

所以,不,不会跳过具有相同时间戳的行。但是,如果第30和第31条记录(根据order子句)具有相同的时间戳,则两者都将被返回,并且您将获得31条记录。

如果要强制返回30条记录,则需要将主键包含在Order By中以区分绑定值:

SELECT TOP 30 * 
FROM Mails 
WHERE timeReceived  < '2012-02-01 12:00:00' 
ORDER BY timeReceived DESC, MailID ASC

答案 1 :(得分:2)

你可以试试这个SQL:

SELECT top 30 * FROM Mails WHERE timeReceived < #2012-02-01#

答案 2 :(得分:1)

这应该有效(未经证实):

SELECT top 30 * 
FROM Mails 
WHERE timeReceived < '2012-02-01 12:00:00'
ORDER BY timeReceived desc