MS Access SQL - выберите указанное количество строк старше указанной даты и времени - PullRequest
0 голосов
/ 21 февраля 2012

Я использую базу данных MS Access .mdb в своем приложении C #.База данных содержит сообщения электронной почты (одна строка - одно сообщение).

Мне нужно получить указанное количество сообщений, которые старше указанной даты / времени.Допустим, 30 сообщений до 2012-02-01 12:00:00.Я пробовал разные запросы, но все они дают мне ошибки.Пробовал TOP, LIMIT и другие заявления также:

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

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

и т. Д.

Любые намеки оценены.

Ответы [ 3 ]

2 голосов
/ 21 февраля 2012

Вы говорите, что пробовали предложение TOP, но оно должно работать

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

Вы должны принять во внимание это .

Директива 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-я записи (согласно пункту заказа) имеют одинаковую временную метку, обе будут возвращены, и вы получите 31 запись.

Если вы хотите принудительно вернуть 30 записей, вам необходимо включитьпервичный ключ в Order By для различения связанных значений:

SELECT TOP 30 * 
FROM Mails 
WHERE timeReceived  < '2012-02-01 12:00:00' 
ORDER BY timeReceived DESC, MailID ASC
2 голосов
/ 21 февраля 2012

Вы можете попробовать этот SQL:

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

1 голос
/ 21 февраля 2012

Это должно работать (не проверено):

SELECT top 30 * 
FROM Mails 
WHERE timeReceived < '2012-02-01 12:00:00'
ORDER BY timeReceived desc
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...