我在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 ?";
等
任何提示都适用。
答案 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