Rambler's Top100
Форум: MS ACCESSVBVBA MS OfficeMS SQL server
Новые сообщения: 0000

Форум: MS ACCESS

Вопросы связанные с MS ACCESS

Обновить визитку
Участники «Online»
Все участники

 
 

Доброго времени суток, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: SELECT TOP 50 * FROM table1 ORDER BY [Date];
 
 автор: dmsrv803   (28.10.2010 в 12:56)   личное сообщение
 
 

А как быть если необходимо вывести в форме не 50 первых а 50 последних записей, причем отсортированы они должны быть по возрастанию?

  Ответить  
 
 автор: Explorer   (28.10.2010 в 13:15)   личное сообщение
 
 

WHERE NOT IN (SELECT TOP n FROM)

  Ответить  
 
 автор: Lukas   (28.10.2010 в 13:52)   личное сообщение
 
 

  Ответить  
 
 автор: Силblч   (28.10.2010 в 14:17)   личное сообщение
 
 


--[1] top 10
select z.* 
from (
select x.* 
      ,dense_RANK() OVER(ORDER BY saldoeq DESC) amtop_rank
from (
   бла-бла-бла
) x
) z
where amtop_rank<11

  Ответить  
 
 автор: Explorer   (28.10.2010 в 14:24)   личное сообщение
 
 

select * from (Select top 50 * from x order by s desc) order by s asc

но похоже что автор решает задачу отображения нгужного количества строк на страницу, но не спрашивает об этом

select * from x limit 100, 50

  Ответить  
 
 автор: Силblч   (28.10.2010 в 15:09)   личное сообщение
 
 


 s asc

"сакс"

  Ответить  
 
 автор: dmsrv803   (28.10.2010 в 16:00)   личное сообщение
 
 


strF = "SELECT * FROM " & _
                    "(SELECT TOP 30 (Plategi.*, DSum('[Summa]','[PlategiRaznoska]', " & _
                    "'[Plategi_ID] = ' & [Plategi_ID]) AS SummaRazn FROM Plategi ORDER BY [Data]     DESC) " & _
                    "ORDER BY [Data] ASC;"

что-то не хочет работать, пишет ошибка синтаксиса в выражении FROM

  Ответить  
 
 автор: Силblч   (28.10.2010 в 16:12)   личное сообщение
 
 


"'[Plategi_ID] = ' & [Plategi_ID])

как то..... '


"[Plategi_ID] = " & [Plategi_ID] & ")

?

  Ответить  
 
 автор: dmsrv803   (28.10.2010 в 16:13)   личное сообщение
 
 

блин скобка лишняя. Все четко работает. Всем огромное спасибо. Так выручаете - впору проставляться.

  Ответить  
 
 автор: час   (28.10.2010 в 16:14)   личное сообщение
 
 

хорошая иде я....

  Ответить  
 
 автор: dmsrv803   (28.10.2010 в 16:17)   личное сообщение
 
 

есть еще вопросик по данной теме - по этому запросу получаю не 30 записей в форме, как хотелось бы,а 42. Подскажите в чем дело и как с этим бороться?

  Ответить  
 
 автор: Explorer   (28.10.2010 в 17:27)   личное сообщение
 
 

TOP не выбирает между одинаковыми (равными) значениями и будет включать большее количество записей если значения некоторых из них равны

  Ответить  
 
 автор: Lukas   (28.10.2010 в 17:35)   личное сообщение
 
 

А ежели "пронумеровать" записи во внутреннем запросе, а во внешнем применить условие по нумеру?
Небыстро это, однако.

  Ответить  
 
 автор: Explorer   (28.10.2010 в 17:52)   личное сообщение
 
 


Небыстро это, однако


и скорее всего не нужно

вероятно "задача" связана с какими-то "фичами" интерфейса - вроде "синхронизации записей в двух подчиненных формах" и т.п.

  Ответить  
 
 автор: Lukas   (28.10.2010 в 18:04)   личное сообщение
 
 

Селект даун 50 ...

  Ответить  
 
 автор: Explorer   (28.10.2010 в 18:10)   личное сообщение
 
 

Bottom!

  Ответить  
 
 автор: Lukas   (28.10.2010 в 18:12)   личное сообщение
 
 

Bottom правильнее, а даун веселее.

  Ответить  
 
 автор: dmsrv803   (29.10.2010 в 14:54)   личное сообщение
 
 

Bottom - это вы о чем ?

  Ответить  
 
 автор: Explorer   (29.10.2010 в 15:22)   личное сообщение
 
 

в некоторых диалектах поддерживаются выражения позволяющие обращаться с наборами записей выбирая по количеству - и снизу и сверху

предикаты SELECT TOP n ; SELECT BOTTOM n

есть и другие спососбы - как Силыч привел или как я ранее MySQLный синтаксис

  Ответить  
 
 автор: dmsrv803   (29.10.2010 в 14:27)   личное сообщение
 
 

Это нужно для того, чтобы пользователь работал с относительно небольшим числом записей, во первых и для более быстрого получения набора записей в форму во-вторых

  Ответить  
 
 автор: Explorer   (29.10.2010 в 14:38)   личное сообщение
 
 

все так и поняли...

что там во вторых?

  Ответить  
 
 автор: Lukas   (29.10.2010 в 14:38)   личное сообщение
 
 

Для этого применяют ограничение набора данных по диапазону дат/Дате.
День/Неделя/Месяц/Квартал/Год

  Ответить  
 
 автор: dmsrv803   (29.10.2010 в 14:44)   личное сообщение
 
 

я так и сделал, просто в день бывает до двухсот платежей, поэтому я решил ограничивать число выводимых в форму записей не только с помощью наложения ограничений по календарному диапазону, но и с использованием непосредственно ограничения на количество записей.

  Ответить  
 
 автор: Lukas   (29.10.2010 в 15:12)   личное сообщение
 
 

Если ключевое поле-счетчик, можно узнавать последнее на дату значение и делать выборку по диапазону значений счетчика.

  Ответить  
 
 автор: dmsrv803   (29.10.2010 в 16:02)   личное сообщение
 
 

а если были удаления

  Ответить  
 
 автор: Lukas   (29.10.2010 в 16:06)   личное сообщение
 
 

Ну и что?
Будет не 50 записей, а 48, к примеру.
В чем проблема?

  Ответить  
 
 автор: dmsrv803   (29.10.2010 в 16:38)   личное сообщение
 
 

ну это уже дело принципа, а не программирования.

  Ответить  
 
 автор: Lukas   (29.10.2010 в 16:45)   личное сообщение
 
 


...ну это уже дело принципа...


Проблема получить ровно 50 записей с уникальными значениями ключевого поля?

  Ответить  
 
 автор: Explorer   (29.10.2010 в 17:12)   личное сообщение
 
 

я так понял постраничный вывод (MS Jet)

1 - пятьдесят
2 - пятьдесят
3 - пятьдесят
... - пятьдесят
n - n

  Ответить  
 
 автор: dmsrv803   (29.10.2010 в 18:13)   личное сообщение
 
 

а как это будут выглядить? и при чем здесь уникальность значений?

  Ответить  
 
 автор: Explorer   (29.10.2010 в 16:20)   личное сообщение
 
 


но и с использованием непосредственно ограничения на количество записей


это может замедлить систему вместо того, чтобы ее ускорить

  Ответить  
 
 автор: dmsrv803   (29.10.2010 в 16:46)   личное сообщение
 
 

Т.е. время выполнения запроса на выборку тридцати проиндексированных записей может быть больше чем время выполнения запроса на выборку нескольких сотен?

  Ответить  
 
 автор: Explorer   (29.10.2010 в 17:05)   личное сообщение
 
 

я что-то не понял - какой конкретно индекс имеется в виду?

такой, чтобы дал возможность определить на какой странице отображать запись...
при чем еще и из подфильтрованного по дате набора записей...

  Ответить  
 
 автор: dmsrv803   (29.10.2010 в 18:09)   личное сообщение
 
 

фильтр в этом случае использовать нет смысла. А что касаемо индекса, то здесь он действительно не при чем - т.к. критерии отбора записей не заданы.
Вообще должен признать врямя выполнение этого запроса не критично.

  Ответить  
 
 автор: Explorer   (29.10.2010 в 18:57)   личное сообщение
 
 


Вообще должен признать врямя выполнение этого запроса не критично



тогда просто вложенными запросами "перевертышами" с разным ранправлением сортировки

например сначала берем 100 сверху SELECT TOP 100 * FROM tblOrders ORDER BY OrderID

потом из него берем сверху 10 SELECT TOP 10 FROM (SELECT TOP 100 * FROM tblOrders ORDER BY OrderID DESC) ORDER BY OrderID

получаем записи с 91 по 100

меняем в первом (вложенном) запросе SELECT TOP 200

получаем записи с 191 по 200

  Ответить  
 
 автор: dmsrv803   (01.11.2010 в 17:41)   личное сообщение
 
 

а как насчет MAXRECORDS?

  Ответить  
 
 автор: Explorer   (01.11.2010 в 18:05)   личное сообщение
 
 

никак

а что MaxRecords - поясни что ты имел в виду

  Ответить  
 
 автор: dmsrv803   (01.11.2010 в 18:25)   личное сообщение
 
 

MaxRecords Property
See AlsoApplies ToExampleSpecifics
Specifies the maximum number of records that will be returned by:

Example
To return the MaxRecords property for a form, you can use the following:

Dim l As Long
l = Forms(formname).MaxRecords
To set the MaxRecords property, you can use the following:
Forms(formname).MaxRecords = numrecords

это из хелпа. Но свойство не работает.

  Ответить  
HiProg.com - Технологии программирования
Rambler's Top100 TopList